第八章. 建立 Web 层
71. Spring 的 MVC 和 Struts 的 MVC 基本一致
Spring 的控制流程是:请求->DispatcherServlet->从 HandlerMapping 中查询到处理该请求的 Controller-> Controller 的 handleRequest 方法调用业务方法,最后返回 ModelAndView (ModelAndView告诉了 DispatcherServlet 转向到哪个视图)
Struts 的控制流程是:请求->ActionServlet->从 ActionMapping 中查询到处理该请求的 Controller (Action类)->Action 的execute 方法调用业务方法,最后返回 ActionForward (ActionForward告诉了 ActionServlet 该转向到哪个视图)(P243)
72. Spring 的 DispatcherServlet 和 Struts 的 ActionServlet 的配置方式是一样的,都是作为一个自启动的 Servlet 配置到 web.xml 中。Spring 的 url-pattern 的配置惯例是 *.htm,而 Struts 通常是配置成 *.do 或 *.action,它暴露了 web 使用的技术。(P244)
73. Spring 中配置了
<servlet-mapping>
<servlet-name>unmi</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
后,在初始化相应的 DispatcherServlet 时会自动加载 /WEB-INF/unmi-servlet.xml 文件,它是一个普通的 Spring Bean 配置文件,也是由 WebApplicationContext 加载。其他的 Bean 配置文件需要像通常的做法由 ContextLoaderListener 或 ContextLoaderServlet 来加载。Spring MVC 内部要使用到的 Bean 就从 unmi-servlet.xml 中获取(P244)
73. Struts 1.2? 后开始可以在 struts-cnfig.xml 中给 Action 注入简单属性,而 Spring 配置 controller 时可以注入所有类型属性(P247)
74. 在 unmi-servlet.xml 中配置的下面这段代码,Spring 将对请求 URL 是 "/home.html" 结尾的分派给 HomeController 处理,DispatcherServlet 使用的默认处理器映射是 BeanNameUrlHandlerMapping(P247)
<beanname="/home.html"class="com.unmi.HomeController">
<propertyname="greeting"><value>WelcometoSpringTraining</value></property>
</bean>
75. Spring 最简单的视图解析器是 InternalResourceViewResoler,如在 unmi-servlet.xml 有下配置
<beanid="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResoler">
<propertyname="prefix"><value>/WEB-INF/jsp/</value></proeprty>
<propertyname="surfix"><value>.jsp/</value></proeprty>
</bean>
那么,当 HomeController 中 返回 return new ModelAndView("home"); 时将会解析成由视图 /WEB-INF/jsp/home.jsp 来展示(P248)
76. 前面只是在 unmi-servlet.xml 配置上 InternalResourceViewResoler,那么 Spring 怎么就知道该用哪个 viewResolver 呢?那要从配置在 web.xml 中的 DispatchServlet 说起。类的层级关系及初始化时方法调用关系如下:
HttpServlet.init(ServletConfig)
∟HttpServletBean.init()
∟FrameworkServlet.initServletBean()
∟DispatcherServlet.initFrameworkServlet()
初始化 HandlerMapping、ViewResolver等的方法就在 DispatcherServlet.initFrameworkServlet() 方法中,依次调用的是:
initMultipartResolver();
initLocaleResolver();
initThemeResolver();
initHandlerMappings();
initHandlerAdapters();
initHandlerExceptionResolvers();
initViewResolvers();
我们看 initViewResolvers(); 的实现,如果 detectAllViewResolvers(默认为 true) 为 true 的话就从 Spring 配置(unmi-servlet.xml)中获取所有类型为 ViewResolver 的 Bean,否则就只获取名为 VIEW_RESOLVER_BEAN_NAME(即“viewResolver”) 的 ViewResolver(视图解析器)。初始化 HandlerMapping的原则也是一样的。(P248)
77. 有三种类型的请求映射控制器,实现的是 HandlerMapping 接口
BeanNameUrlHandlerMapping -- 根据控制器的名字将控制器映射到 URL
SimpleUrlHandlerMapping -- 用上下文配置文件中定义的属性集合将控制器映射到 URL
CommonsPathMapHandlerMapping -- 使用控制器代码中的元数据将控制器映射到 URL
DispatcherServlet 缺省映射处理器是 BeanNameUrlHandlerMapping,它将表现层 URL 和控制器名字绑定起来了, Spring 不建议使用这个映射处理器,建议用 SimpleUrlHandlerMapping。可是我觉得用 BeanNameUrlHandlerMapping 挺方便的啊(P250)
78. 使用 SimpleUrlHandlerMapping 的配置,需要将系统中用到的 URL 一一逻列出来(P251)
<beanid="simpleUrlMapping"class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<propertyname="mappings">
<props>
<propkey="/listCourse.html">listCoursesController</prop>
<propkey="/register.htm">registerStudentController</prop>
</props>
</peroperty>
</bean>
79. 使用 CommonsPathMapHandlerMapping 需要为 Controller 类注解上 PathMap 属性为一个 URL。是否用注解还是用配置文件一直存在争议,而我是不喜欢把配置的东西放到源代码中,这像是在硬编码,所以应该不会考虑用这种方式。(P252)
80. 可用同时配置多映射处理器,通过配置它们实现的 Ordered 接口的 order 属性,DispatcherServlet 按顺序采用哪个映射处理器(责任链模式)
分享到:
相关推荐
Spring in Action中文清晰版(带阅读笔记). Spring in Action中文清晰版(带阅读笔记).
Spring in Action中文清晰版(带阅读笔记)
### Spring In Action笔记100例精要解析 #### 1. `<ref>`标签中的`bean`, `local`, `parent`三个属性的区别 在Spring框架中,`<ref>`标签用于表示一个对象引用,通常用来注入另一个Bean。该标签包含三个重要的属性...
Spring in Action 中文 清晰版 (带阅读笔记)(共压缩4分卷) 此第3分卷 是扫描版的 感谢分享的兄弟
### Spring in Action 学习笔记知识点总结 #### 1. Spring 框架基础 ##### 1.1 Spring 概述 - **轻量级**:Spring 的“轻量级”主要体现在其对资源消耗较少,同时具备低入侵性。在基于 Spring 开发的应用中,业务...
《Spring in Action》是一本深度剖析Spring框架的权威著作,其中文清晰版为中国的开发者提供了便利,便于理解和学习。本书全面覆盖了Spring的核心概念和技术,包括依赖注入、AOP(面向切面编程)、数据访问、Web开发...
Spring in Action 中间带有读书笔记, 第2部分共4部分
标题和描述均提到了“spring指南学习笔记”,这意味着文档聚焦于Spring框架的学习心得与关键概念。Spring是一个开源的Java企业级应用框架,以其强大的依赖注入(Dependency Injection, DI)和面向切面编程(Aspect ...
以下将详细介绍Spring学习笔记中的主要知识点。 **面向抽象编程** 面向抽象编程是一种设计原则,强调在代码中使用接口或抽象类,而不是具体实现类。这使得系统更具有灵活性,易于扩展和维护。在Spring框架中,我们...
Spring in Action 中间带有读书笔记 第4部分共4部分
`spring_struts.txt`可能描述了如何配置Action和ActionForm,以及如何在Spring中管理Struts的业务逻辑。 6. **Spring事务管理**: Spring提供了PlatformTransactionManager接口,支持不同的事务管理策略,如编程式和...
Spring in Action 中间带有读书笔记,第3部分共4部分
读书笔记:《Spring Boot实战》Spring Boot in Action
Spring in Action 中文 清晰版 (带阅读笔记).part2
Spring in Action 中文 清晰版 (带阅读笔记).part1
#### 五、Spring Bean的作用域 Spring支持多种作用域,包括但不限于: 1. **Singleton**(单例):每个Spring IoC容器仅有一个bean实例。 2. **Prototype**(原型):每次请求都会创建一个新的bean实例。 3. **...
**Spring3笔记** Spring是企业级应用的全面解决方案,包括依赖注入(DI)、面向切面编程(AOP)、事务管理等。以下是关键点: 1. **依赖注入(Dependency Injection, DI)**: 通过容器管理组件之间的依赖关系,...