首页 > 代码库 > Spring MVC 的 研发之路 (二)
Spring MVC 的 研发之路 (二)
二、web.xml的简单配置介绍1
一、
<span style="font-size:18px;"><context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:/spring/application-datasource.xml </param-value> </context-param></span></span>
该元素用来声明应用范围内的上下文初始化参数(整个web项目中)例如对数据库连接池的配置等
param-name 设定上下文的参数名称,名称必须唯一
param-value 设定的参数名称的值 指定响应的xml文件名,如果有多个文件可以写在一起用“,”分隔
可以采用通配符形式applicationContext-*.xml 可以将此类开头的文件全部载入
1、可以直接将之放到/web-inf下
2、放到classpath下 classpath:/spring/application-datasource.xml
如:
<span style="font-size:18px;"><!-- Context Configuration locations for Spring XML files --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value> </context-param> </span><span style="font-size: 14px;"> </span></span>
以此供web容器加载
二、
<span style="font-size:18px;"><listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener></span></span>
listener标签是用于监听的,ContextLoaderListener实现了ServletContextListener接口,可以监听所有的servlet、session、request等接口。
ServletContext:每个web应用都有一个servletContext与之相关.servletContext对象在应用启动的时候被创建,在应用关闭的时候被销毁。
ervletContextListener: 使用listener接口,开发者能够在为客户端请求提供服务之前向ServletContext中添加任意的对象。这个对象在ServletContext启动的时候被初始化,然后在ServletContext整个运行期间都是可见的。该接口拥有两个方法如下所示:
三、<filter>
<filter-name></filter-name>
<filter-class></filter-class>
</filter>
<span style="font-size:18px;"> <filter> <filter-name>Character Encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></span><span style="font-size: 14px;"> </span>
以上是防止乱码
<span style="font-size:18px;"><filter> <filter-name>Spring OpenEntityManagerInViewFilter</filter-name> <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class> <init-param> <param-name>entityManagerFactoryBeanName</param-name> <param-value>entityManagerFactory</param-value> </init-param> </filter> <filter-mapping> <filter-name>Spring OpenEntityManagerInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></span><span style="font-size: 14px;"> </span>
在Java Web项目中使用Hibernate经常会遇到LazyInitializationException。这是因为controller和model层(java代码)将通过JPA的一些启用了延迟加载功能的领域(如用getRefrence()方法或者在关联关系中采用fetch=FetchType.LAZY)返回给view层(jsp代码)的时候,由于加载领域对象的JPA Session已经关闭,导致这些延迟加载的数据访问异常。
这时就可以使用OpenEntityManagerInViewFilter来将一个JPAsession与一次完整的请求过程对应的线程相绑定。
如果没使用OpenEntityManagerInViewFilter,session会在service.find()方法后就被关闭,用了以后session在整个view层结束后才关闭。
四、
<span style="font-size:18px;"><servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping></span><span style="font-size: 14px;"> </span>
DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。 具体请参考第二章的图2-1。
DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:
1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);
3、 通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);
4、通过ViewResolver解析逻辑视图名到具体视图实现;
5、本地化解析;
6、渲染具体的视图等;
7、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。
load-on-startup:表示启动容器时初始化该Servlet;
url-pattern:表示哪些请求交给Spring WebMVC处理, “/” 是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求。
DispatcherServlet默认使用WebApplicationContext作为上下文,Spring默认配置文件为“/WEB-INF/[servlet名字]-servlet.xml”。
Spring MVC 的 研发之路 (二)