SpringMVCDispatcher说明

上传人:宝路 文档编号:20893908 上传时间:2017-11-22 格式:DOC 页数:21 大小:130.12KB
返回 下载 相关 举报
SpringMVCDispatcher说明_第1页
第1页 / 共21页
SpringMVCDispatcher说明_第2页
第2页 / 共21页
SpringMVCDispatcher说明_第3页
第3页 / 共21页
SpringMVCDispatcher说明_第4页
第4页 / 共21页
SpringMVCDispatcher说明_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《SpringMVCDispatcher说明》由会员分享,可在线阅读,更多相关《SpringMVCDispatcher说明(21页珍藏版)》请在金锄头文库上搜索。

1、DispatcherServlet 说明使用 Spring MVC,配置 DispatcherServlet 是第一步。DispatcherServlet 是一个 Servlet,所以可以配置多个 DispatcherServlet。DispatcherServlet 是前置控制器,配置在 web.xml 文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标 Controller(我们写的 Action)来处理。“某某规则” :是根据你使用了哪个 HandlerMapping 接口的实现类的不同而不同。先来看第一个例子:Xml 代码 1. 2

2、. 3. example 4. org.springframework.web.servlet.DispatcherServlet 5. 1 6. 7. 8. example 9. *.form 10. 11. 1是启动顺序,让这个 Servlet 随 Servletp 容器一起启动。*.form 会拦截*.form 结尾的请求。 example这个 Servlet 的名字是 example,可以有多个DispatcherServlet,是通过名字来区分的。每一个 DispatcherServlet 有自己的WebApplicationContext 上下文对象。同时保存的 ServletCo

3、ntext 中和 Request 对象中,关于 key,以后说明。在 DispatcherServlet 的初始化过程中,框架会在 web 应用的 WEB-INF 文件夹下寻找名为servlet-name-servlet.xml 的配置文件,生成文件中定义的 bean。第二个例子:Xml 代码 1. 2. springMVC 3. org.springframework.web.servlet.DispatcherServlet 4. 5. contextConfigLocation 6. classpath*:/springMVC.xml 7. 8. 1 9. 10. 11. springM

4、VC 12. / 13. 指明了配置文件的文件名,不使用默认配置文件名,而使用 springMVC.xml 配置文件。其中*.xml 这里可以使用多种写法1、不写,使用默认值:/WEB-INF/-servlet.xml2、/WEB-INF/classes/springMVC.xml3、classpath*:springMVC-mvc.xml4、多个值用逗号分隔Servlet 拦截匹配规则可以自已定义,Servlet 拦截哪种 URL 合适? 当映射为RequestMapping(/user/add)时:1、拦截*.do ,例如: /user/add.do,弊端:所有的 url 都要以 .do

5、结尾。不会影响访问静态文件。2、拦截/app/*,例如:/app/user/add ,弊端:请求的 url 都要包含/app,RequestMapping(/user/add)中不须要包含/app。3、拦截/,例如:/user/add,弊端:对 jpg,js,css 静态文件的访问也被拦截不能正常显示。后面有解决办法。4、拦截/*,可以走到 Action 中,但转发到 jsp 时再次被拦截,不能访问到 jsp。五、双亲上下文的说明如果你使用了 listener 监听器来加载配置,一般在 Struts+Spring+Hibernate 的项目中都是使用 listener 监听器的。如下Java

6、代码 1. 2. org.springframework.web.context.ContextLoaderListener 3. Spring 会创建一个全局的 WebApplicationContext 上下文,称为根上下文 ,保存在ServletContext 中,key 是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE 属性的值。可以使用工具类取出上下文:WebApplicationContextUtils.getWebApplicationContext(ServletContext);DispatcherSe

7、rvlet 是一个 Servlet,可以同时配置多个,每个 DispatcherServlet 有一个自己的WebApplicationContext 上下文,这个上下文继承了 根上下文 中所有东西。 保存在ServletContext 中,key 是org.springframework.web.servlet.FrameworkServlet.CONTEXT+Servlet 名称。当一个Request 对象产生时,会把这个 WebApplicationContext 上下文保存在 Request 对象中,key是 DispatcherServlet.class.getName() + .C

8、ONTEXT。可以使用工具类取出上下文:RequestContextUtils.getWebApplicationContext(request);Spring 中的 ApplicationContext 实例可以被限制在不同的作用域(scope)中。在 web MVC 框架中,每个 DispatcherServlet 有它自己的 WebApplicationContext ,这个 context 继承了根 WebApplicationContext 的所有 bean 定义。这些继承的 bean 也可以在每个 serlvet 自己的所属的域中被覆盖(override),覆盖后的bean 可以被

9、设置上只有这个 servlet 实例自己使用的属性。总结:不使用 listener 监听器来加载 spring 的配置,改用 DispatcherServlet 来加载 spring的配置,不要双亲上下文,只使用一个 DispatcherServlet,事情就简单了,什么麻烦事儿也没有了。六、springMVC-mvc.xml 配置文件片段讲解 (未使用默认配置文件名)Xml 代码 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 扫描指定的包中的类上的注解,常用

10、的注解有:Controller 声明 Action 组件Service 声明 Service 组件 Service(myMovieLister) Repository 声明 Dao 组件Component 泛指组件, 当不好归类时. RequestMapping(/menu) 请求映射Resource 用于注入,( j2ee 提供的 ) 默认按名称装配,Resource(name=beanName) Autowired 用于注入,(srping 提供的) 默认按类型装配 Transactional( rollbackFor=Exception.class) 事务管理ResponseBodySc

11、ope(prototype) 设定 bean 的作用域是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。 会自动注册DefaultAnnotationHandlerMapping 与 AnnotationMethodHandlerAdapter 两个 bean,是spring MVC 为Controllers 分发请求所必须的。并提供了:数据绑定支持,NumberFormatannotation 支持,DateTimeFormat 支持,Valid 支持,读写 XML 的支持(JAXB),读写 JSON 的支持(Jackson)。后面,我们处理响应 a

12、jax 请求时,就使用到了对 json 的支持。后面,对 action 写 JUnit 单元测试时,要从 spring IOC 容器中取DefaultAnnotationHandlerMapping 与 AnnotationMethodHandlerAdapter 两个 bean,来完成测试,取的时候要知道是这一句注册的这两个 bean。是一种简写形式。通过看前面的大图,知道,我们可以配置多个HandlerMapping。会为每一个 HandlerMapping,注入一个拦截器。其实我们也可以手动配置为每个 HandlerMapping 注入一个拦截器。使用默认的 Servlet 来响应静态文

13、件。匹配 URL /images/* 的 URL 被当做静态资源,由 Spring 读出到内存中再响应 http。七、如何访问到静态的文件,如 jpg,js,css?如何你的 DispatcherServlet 拦截 *.do 这样的 URL,就不存在访问不到静态资源的问题。如果你的 DispatcherServlet 拦截“/”,拦截了所有的请求,同时对 *.js,*.jpg 的访问也就被拦截了。目的:可以正常访问静态文件,不要找不到静态文件报 404。方案一:激活 Tomcat 的 defaultServlet 来处理静态文件Xml 代码 1. 2. default 3. *.jpg 4.

14、 5. 6. default 7. *.js 8. 9. 10. default 11. *.css 12. 13.要配置多个,每种文件配置一个 要写在 DispatcherServlet 的前面, 让 defaultServlet 先拦截,这个就不会进入 Spring 了,我想性能是最好的吧。Tomcat, Jetty, JBoss, and GlassFish 默认 Servlet 的名字 - defaultGoogle App Engine 默认 Servlet 的名字 - _ah_defaultResin 默认 Servlet 的名字 - resin-fileWebLogic 默认 S

15、ervlet 的名字 - FileServletWebSphere 默认 Servlet 的名字 - SimpleFileServlet 方案二: 在 spring3.0.4 以后版本提供了 mvc:resources mvc:resources 的使用方法:Xml 代码 1. 2. /images/*映射到 ResourceHttpRequestHandler 进行处理,location 指定静态资源的位置.可以是 web application 根目录下、jar 包里面,这样可以把静态资源压缩到 jar 包中。cache-period 可以使得静态资源进行 web cache 如果出现下面的错误,可能是没有配置的原因。 报错 WARNING: N

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号