




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SpringMVC4.0–1、前SpringMVC是非常优秀的MVC框架由其是在3.0版本发布后现在有越来越多的团队选择了SpringMVC了。SpringMVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀。的是采用了值栈OGNL表达式struts2库等会导致应用的性能下降Struts2的多层器多实例actionSpringMVC1、SpringMVCStruts2,Struts22、SpringMVC很容易就可以写出性能优秀的程序,Struts2要处处才可以写出性能优秀的程3、SpringMVC的灵活是你无法想像的,Spring的扩展性有口皆碑,Spring3MVC当然也不会,不会MVC框架而感到有任何的限制。Struts2的众多优点:略 (呵呵,是不是2、1:可以从baidu中搜索的整体zip文件2:3:参考使用maven添加3、类与接1、 --前置控制2、HandlerMap接口--处理请求的映HandlerMap接口的实现类SimpleUrlHandlerMap通过配置文件,把一个URL映射到DefaultAnnotationHandlerMap通过注解,把一个URL映射到Controller类在spring3.2以后,此类已经不再建议使用修改使用RequestMapHandlerMap实现RequestMapHandlerMap的api:用于识别在类上添加的@RequestMap注CreatesRequestMapInfoinstancesfromtypeandmethod-level@RequestMapannotationsin@Controllerclasses.3、HandlerAdapter--处理请求的映AnnotationMethodHandlerAdapterURL映射到ControllerRequestMapHandlerAdapter类,在Spring3.2以后,上面的类已不被建议使用 HandlerMethopterthatsupportsHandlerMethodswiththesignature--methodargumentandreturntypes,definedin@RequestMap.即用于识别在方法上添加的@RequestMap注解。4、Controller--控制所以我们并没有用到这个接口。在类中只要添加@Controller5、HandlerInterceptor接口--我们自己实现这个接口,来完成的器的工作6、ViewResolver接口的实现UrlBasedViewResolverView7、View接JstlView8、用于解决i18n9、HandlerExceptionResolver--异常处SimpleMapExceptionResolver实现4、执5、DispatcherServlet说SpringMVC,DispatcherServlet定义,把下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。“某某规则”:是根据你使用了哪个HandlerMap接口的实现类的不同而不同。<web-<servlet-map<url-pattern>*form</url-<url-pattern>*form</url-pattern>会*form结尾的请求名字来区分的。每一个DispatcherServlet有自己的WebApplicationContext上下文对象。同时保存的ServletContext中和Request对象中,关于key,以后说明。DispatcherServletwebWEB-INF文件夹下寻找名为[servlet-name]-servletxmlbean。<init-<param-value>classpath*:/springMVCxml</param-</init-<servlet-mapspringMVC.xml配置文件。其中<param-value>**xml</param-value>这里可以使用多种写法2、<param-value>/WEB-INF/classes/springMVCxml</param-value>3、<param-value>classpath*:springMVC-mvcxml</param-value>46、Servlet匹配规则可以自已定义,Servlet哪种URL合适1、*.do,例如:/user/add.do,弊端:所有的url都要以.do结尾。不会影响静态文件3、/,例如:/user/add,弊端:对jpg,js,css静态文件的也被不能正常显示。后面有解决办法4、/*,可以走到Action中,但转发到jsp时再次被,不能到jsp7、双亲上下文的说如果你使用了listener器来加载配置,一般在Struts+Spring+Hibernate的项目中都是使用Spring会创建一个全局的WebApplicationContextServletContext中,key是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTEDispatcherServlet是一个Servlet,可以同时配置多个,每个DispatcherServlet有一个自己的WebApplicationContext上下文,这个上下文继承了根上下文中所有东西。保存在ServletContext中,key是"org.springframework.web.servlet.FrameworkServlet.CONTEXT"+Servlet名称当一个Request对象产生时,会把这个WebApplicationContext上下文保存在Request对象中,key是DispatcherServlet.class.getName()+ SpringApplicationContext实例可以被限制在不同的作用域(scope)webMVCDispatcherServletWebApplicationContextcontextWebApplicationContext的所有beanservlet实例自己使用的属性。总结:不使用listener器来加载spring的配置,改用DispatcherServlet来加载spring的配置,不要双亲上下文,只使用一个DispatcherServlet,事情就简单了,什么麻烦事儿也没有了。8、spring.xml配置文件片段<!-- ponent-scanbase- .core,JUnit4" ponent-<!--<mvc:annotation-driven<!--<bean<propertyname="prefix"value="/WEB-<propertyname="suffix"<!--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑<!--器--<beanclass="com.coremvc.MyInteceptor"<!--对静态资源文件的方案一(二选一)--<!--对静态资源文件的方案二(二选一)--<mvcresourcesmap="/images/**"location="/images/"cache- <mvcresourcesmap="/js/**"location="/js/"cache- <mvcresourcesmap="/css/**"location="/css/"cache-period=" 在spring3.2<!--<beanng"/>--><!--<beanr"/>--><!--控制在类上添加的@RequestMap注解,下面的类可以实现更加详细的配置,比用mvc:更好一些,这要看个人的--><!--<beanap"/>--<!--<bean
/>--由于写了/以后,对静态资源导入不成功,所以可以使用resource去除不被spring<!--<mvc:resourceslocation="/js/"map="/js/**"period="#{60*60*24*30}"/>--<!--也可以使用以下方法去除对静态资源的--<!--<mvc:default-servlet-handler/>--<!--将静态的资源的地址,传递到SimpleUrlHandlerMap中可以实现上面同样的效果--<property<property<entry<property对所有css<entry
<!--自己的类--<beanid="test01"class="cn.test.controller.Test01Controller" ponent-scan/>@ControllerAction组 Service组件 @RepositoryDao组件 泛指组件,当不好归类时.@RequestMap("/")请求映射@Resource用于注入,j2ee)默认按名称装配,@Resource(name="beanName")@Autowired用于注入,(sr提供的)默认按类型装配@Transactional(rollbackFor={Exception.class}) 设定bean<mvc:annotation-driven是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。<mvc:annotation-driven/>会自动RequestMapHandlerMap与RequestMapHandlerAdapter两个bean,是springMVC为@Controllers分发请求所必须的。并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid后面,我们处理响应ajax请求时,就使用到了对json<mvc:interceptors/>是一种简写形式。通过看前面的大图,知道,我们可以配置多个HandlerMap<mvc:interceptors/>会为每一个HandlerMap,注入一个器。其实我们也可以手动配置为每个HandlerMap注入一个器<mvc:default-servlet-handler/>Servlet<mvcresourcesmap="/images/**"location="/images/"cache- "/>匹配URLURL被当做静态资源,由Spring读出到内存中再响应http9、如何到静态的文件,如如何你的DispatcherServlet*.do这样的URL,就不存在不到静态资源的问题。如果你目的:可以正常静态文件,不要找不到静态文件报404。方案一:激活Tomcat的defaultServlet来处理静<servlet-map<servlet-map<servlet-map,要写在DispatcherServlet的前面,让defaultServlet先,这个就不会进入Spring了性能是最好的,Tomcat,JettyJBossandGlassFishServletdefault"AppEngine默认Servlet的名字--"_ah_default"Resin默认Servlet的名字--"resin-file"WebLogicServlet的名字"FileServlet"WebSphereServlet方案二spring3.0.4以后版本提供了mvcresourcesXml<!--对静态资源文件的--<mvcresourcesmap="/images/**"location="/images/" 如果出现下面的错误,可能是没有配置<mvc:annotation-driven报错WARNING:NomapfoundforHTTPrequestwithURI[/mvc/user/findUser/lisi/770]inDispatcherServletwithname'springMVC'使用<mvcresources/>元素,把map的URI到SimpleUrlHandlerMap的urlMap中,key为map的URIpattern值,而value为ResourceHttpRequestHandler,这样就巧妙的把对静态资源的由HandlerMap转到ResourceHttpRequestHandler处理并返回,所以就支持classpath ,jar包内静态资源的.另外需要注意的一点是,不要对SimpleUrlHandlerMap设置defaultHandler.因为对staticuridefaultHandler就是否则无法处理staticresources如到SimpleUrlHandlerMap上<property<property<entry<property对所有css<entry
方案<mvc:default-servlet-Xml会把"/**"url,到SimpleUrlHandlerMap的urlMap中,把对静态资源的由HandlerMap转到org.springframework.web.servletresource.DefaultServletHttpRequestHandler处理并返回.DefaultServletHttpRequestHandlerServlet补充说明:多个HandlerMap的执行顺序问题DefaultAnnotationHandlerMap的order属性值是<mvcresources/>自动的SimpleUrlHandlerMap的order属性值是<mvc:default-servlet-handler/>自动的SimpleUrlHandlerMap的order属性值是spring会先执行order值比较小的。当一个a.jpg图片文件时,先通过DefaultAnnotationHandlerMap来找处理器,一定是找不到的,我们没有叫a.jpg的Action。再按order值升序找,由于最后一个SimpleUrlHandlerMap是匹配"/**"的,所以一定会匹配上,再响应。一个,还要走层层匹配。真不知性能如何?改天做一下压力测试,与Apache。最后再说明一下,如何你的DispatcherServlet*.do这样的URL,就不存上述问题了。10、请求如何映射到具体的Action中的方方案一:基于xml配置映射,可以利用SimpleUrlHandlerMap、BeanNameUrlHandlerMap进行Xmlap"/>以上都可以注入interceptors,实现权限控制等前置工作。2springMVC并在action类上使用:11、Spring中的Springorg.springframework.web.servlet.HandlerInterceptor接口,Action之前执行publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,ObjectpublicvoidpostHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,ModelAndViewmodelAndView);publicvoid pletion(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,Exceptionex)在preHandle中,可以进行编码、安全控制等处理;在postHandleModelAndView; pletion中,可以根据ex是否为null判断是否发生了异常,进行日志记录。参数中的Objecthandler是下一个器。12、如何使用器自定义一个器,要实现HandlerInterceptor接口JavapublicclassMyInteceptorimplementsHandlerInterceptor}SpringMVC并没有总的器,不能对所有的请求进行前后SpringMVC的器是属于HandlerMap级别的可以有多个HandlerMap每个可以有自己的器当一个请求按Order值从小到大,顺序执行HandlerMap接口的实现类时,哪一个先有返回,那就可以结束了,后面的HandlerMap就不走了,本道工序就完成了。就转到下一道工序了。器会在什么时候执行呢?一个请求交给一个HandlerMap时,这个HandlerMap先找有没有处springMVC的配置文件中配置有三种方法:Java<beanclass="com.app.mvc.MyInteceptor"<mvc:interceptors/>会为每一个HandlerMap,注入一个器。总有一个HandlerMap是可以找到方案二,(近似)总器,匹配的URL。Xml代码<mvc:interceptors<mvcmappath="/user/*"/><!--/user/*--<beanclass="comURL匹配。方案三,HandlerMappint上的器Xml<property<beanclass="com如果使用了<mvc:annotation-driven/>,它会自动注册DefaultAnnotationHandlerMap与AnnotationMethodHandlerAdapter这两个bean,所以就没有机会再给它注入interceptors属性,就无法指定拦当然我们可以通过人工配置上面的两个Bean<mvc:annotation-driven,就可以给interceptors性注入器了13、如何实现全局的异常处springMVCXml<!--总错误处理 <property<property<property这里主要的类是SimpleMapExceptionResolver类,和他的父类 HandlerExceptionResolver类。HandlerExceptionResolver接口,写一个自己的异常处理程序。spring通过SimpleMapExceptionResolver我们可以将不同的异常映射到不同的jsp页面(通exceptionMaps属性的配置抛出的异常在exceptionMaps中没有对应的映射,则Spring将用此默认配置显示异常信息。注意这里配置的异常显示界面均仅包括主文件名,至于文件路径和后缀已经在viewResolver显示错误的jsp页面:Html<%@pagelanguage="java"contentType="text/html;charset=GBK"<%@page <metahttp-equiv="Content-Type"content="text/html;<h1>出错了Exceptione=(Exception)request.getAttribute("exception");
14、如何把全局异常记录到日志中定名。我是在SimpleMapExceptionResolver类父类HandlerExceptionResolver类中找到这个属warnLogCategory不为空,spring就会使用apachemons.logging.Logwarn值:“org.springframework.web.servlethandler.SimpleMapExceptionResolver”,是“SimpleMapExceptionResolver类的全限定名。这个值不是随便写的。因为我在log4j的配置文件中warn的日志一定会被记录,即使log4j的根日志级别是ERROR。15、如何给springMVC中的ActionJUnit单元测试springMVCactionaction写单元测试的,再在不同JUnitActionBaseJUnitJavapackageimportjavax.servlethttp.HttpServletRequest;importjavax.servlethttp.HttpServletResponse;importorg.junit.BeforeClass;importorg.springframework.mock.web.MockServletContext;importorg.springframework.web.servlet.HandlerAdapter;importorg.springframework.web.servlet.HandlerExecutionChain;importorg.springframework.web.servlet.HandlerMap;importorg.springframework.web.servlet.ModelAndView;importorg.springframework.web.servletmvc.annotation.AnnotationMethodHandlerAdapter;importorg.springframework.web.servletmvc.annotation.DefaultAnnotationHandlerMap;JUnit测试actionpublicclassJUnitActionBaseprivatestaticHandlerMaphandlerMap;privatestaticHandlerAdapterhandlerAdapter;*springMVC配置文publicstaticvoidsetUp()if(handlerMap==null)String[]configs={"file:src/springConfig/springMVCxml"};XmlWebApplicationContextcontext=newXmlWebApplicationContext();MockServletContextmsc=newMockServletContext(); contextrefresh();handlerMap=(HandlerMap)context }}request对象请求的*@param@param@throwspublicModelAndViewexcuteAction(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{HandlerExecutionChainchain=handlerMap.getHandler(request);finalModelAndViewmodel=handlerAdapter.handle(request,response,returnmodel;}}这是个JUnit测试类,我们可以newRequest对象,来参与测试,太方便了。给request指定的URL,Action了。Java importorg.junit.Assert;importorg.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 白酒回购合同协议合同书
- 景观绿化工程服务合同
- 购销合同货物清单
- 边坡防护工程劳务合同
- 用图形进行编码(教学设计)2024-2025学年四年级上册信息技术苏科版
- 8 比尾巴(教学设计)2024-2025学年语文一年级上册统编版
- 人教版初中历史与社会七年级下册 6.3.2草原风情 教学设计
- 浙江工商大学杭州商学院《供应链管理》2023-2024学年第二学期期末试卷
- 云南经贸外事职业学院《生物技术专业文献检索与科技论文写作》2023-2024学年第二学期期末试卷
- 中国药科大学《单片机原理》2023-2024学年第二学期期末试卷
- 2024年山东工程职业技术大学单招职业倾向性测试题库(500题)含答案解析
- 生活垃圾我知道(课件)二年级下册劳动
- 事业单位考试职业能力倾向测验(医疗卫生类E类)试卷及答案指导
- 每日系列-计算小纸条-3年级下册
- 2024年广西区公务员考试《行测》真题及答案解析
- 化工安全 教案 第三章 燃烧与爆炸理论基础
- 第二单元 社会主义制度的建立与社会主义建设的探索(单元解读)- 八年级历史下册同步备课系列
- 新能源汽车维护与故障诊断课件 项目一 安全防护知识与应用
- 阑尾炎的护理查房腹腔镜
- 大学辅导员岗位考核参考指标
- 学校实验室危险化学品安全工作检查记录表
评论
0/150
提交评论