web.xml配置
- contextConfigLocation
指定Spring Ioc容器需要读取的XML文件路径 - ContextLoaderListener Spring监听器
Spring MVC在Web容器中的启动类,读取applicationContext.xml
负责Spring Ioc容器在Web上下文中的初始化
ServletContextListener
接口有两个方法:contextInitialized
,contextDestroyed
- DispatcherServlet
前端处理器,接受HTTP请求和转发请求的类 - CharacterEncodingFilter
字符集过滤器 - IntrospectorCleanupListener
放置Spring内存溢出的监听器
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 项目名称 -->
<display-name>springmvcTest</display-name>
<!-- 配置SpringMVC前端控制器 -->
<servlet>
<servlet-name>spring</servlet-name>
<!--servlet-class中的值是spring-webmvc包提供的类,即前端控制器,用于控制所有请求 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 设置springmvc-servlet.xml路径 -->
<!-- contextConfigLocation配置springmvc加载的指定配置文件路径 -->
<!-- 如果不指定,默认加载的是/WEB-INF/servlet名称-serlvet.xml -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
<!-- 设置启动顺序 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- servlet映射关系配置 -->
<servlet-mapping>
<servlet-name>spring</servlet-name>
<!--url-pattern(重点)中有3个值,分别为/、 /*、 *.action -->
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 配置字符编码过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
关于指定路径的问题
默认配置:放在WEB-INF目录下,名称 xxx-servlet.xml,不需要配置<init-param>
指定路径:
<!-- 放在WEB-INF目录下,可以不使用 xxx-servlet.xml命名 -->
<param-value>/WEB-INF/springmvc.xml</param-value>
<!-- 放在WEB-INF/spring目录下 -->
<param-value>/WEB-INF/spring/springmvc.xml</param-value>
<!-- 放在src目录下 -->
<param-value>classpath:springmvc.xml</param-value>
<param-value>/WEB-INF/classes/springmvc.xml</param-value>
<!-- 放在src/spring目录下 -->
<param-value>classpath:spring/springmvc.xml</param-value>
<param-value>/WEB-INF/classes/spring/springmvc.xml</param-value>
注:
classpath: = /WEB-INF/classes/
classpath:springmvc.xml与classpath:/springmvc.xml,加不加/都一样
/WEB-INF/classes与WEB-INF/classes,加不加/都一样
指定路径的时候<servlet-name>spring 与<param-value>springmvc.xml名字可以不一样
默认路径的时候<servlet-name>xxx 必须要使用xxx-servlet.xml的前导名xxx作为名称
springmvc-servlet.xml配置
1 处理器适配器和处理器映射器
<!-- 单独配置处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!-- 单独配置处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!-- 配置注解驱动:可以自动加载处理器映射器和处理器适配器,因此可以代替上述单独配置处理器映射器和处理器适配器 -->
<mvc:annotation-driven />
2 视图解析器
视图解析器是为了当html,jsp等前端文件放到WEB-INF/的路径下时,浏览器不能直接访问,就需要使用视图解析器来访问相应的前端文件
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置逻辑视图的前缀 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 配置逻辑视图的后缀 -->
<property name="suffix" value=".jsp" />
</bean>
3 转换器(自定义参数绑定)
3.1 注解方式
转换器的id要与注解驱动中conversion-service属性内容一致
<!-- 配置注解驱动 (加上了转换器) -->
<mvc:annotation-driven conversion-service="conversionService" />
<!-- 转换器的配置(方式1) -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.zl.converter.DateConverter" />
</set>
</property>
</bean>
3.2 非注解方式
该方式需要独立配置处理器映射器和处理器适配器,不再使用注解驱动的方式
<!-- 转换器的配置(方式2) -->
<!-- 该方式需要独立配置处理器映射器和处理器适配器,不再使用注解驱动的方式 -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="webBindingInitialzer" ref="customBinder" />
</bean>
<!-- 自定义webBinder -->
<bean id="customBinder"
class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="conversionService" ref="conversionService" />
</bean>
<!-- 转换器配置 -->
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.zl.converter.DateConverter" />
</set>
</property>
</bean>
4 异常处理器
<!-- 配置全局异常处理器 -->
<bean id="customHandleException" class="com.zl.exception.CustomHandleException"/>
<!-- 配置使用 SimpleMappingExceptionResolver 来映射异常 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- 定义默认的异常处理页面 -->
<property name="defaultErrorView" value="error" />
<!-- 配置异常的属性值为ex,那么在错误页面中可以通过 ${exception} 来获取异常的信息 -->
<!-- 如果不配置这个属性,它的默认值为exception -->
<property name="exceptionAttribute" value="exception"></property>
<property name="exceptionMappings">
<props>
<!-- 映射特殊异常对应error.jsp这个页面 -->
<prop key=".DataAccessException">error</prop>
<prop key=".NoSuchRequestHandlingMethodException">error</prop>
<prop key=".TypeMismatchException">error</prop>
<prop key=".MissingServletRequestParameterException">error</prop>
</props>
</property>
</bean>
5 文件上传解析器
CommonsMultipartResolver
这个Bean的id必须为multipartResolver
,
原因:CommonsMultipartResolver Bean是在DispatcherServlet中加载的,而DispatcherServlet是通过名字来查找这个Bean的。而其他的,则是按照类型查找。
<!-- 配置文件上传解析器:id必须为multipartResolver -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置文件上传大小 -->
<property name="maxUploadSize" value="500000" />
</bean>
6 json转换器
没有使用注解驱动时,需要配置,如果使用注解驱动,无需配置
<!--处理器适配器 -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
</list>
</property>
</bean>
7 拦截器
拦截器是拦截tomcat容器和spring容器之间的交互信息,主要是用于验证用户在访问该网页时是否登陆
<!-- 配置拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 所有的请求都进入拦截器 -->
<mvc:mapping path="/**" />
<!-- 配置具体的拦截器 -->
<bean class="com.zl.web.interceptor.MyInterceptor1" />
</mvc:interceptor>
</mvc:interceptors>