最近终于有点时间来整理一下了,Spring框架的强大和灵活性,大家都已经知道了,比如它完全可以代替Struts2,本身已经提供很多功能,同时还可以整合第三方框架到其中,那下面就简单整理总结一下,如何建立一个简单的SpringMVC,下面分步说明,
1,向工程添加Spring相关的jar包,
MyEclipse中直接添加Spring功能即可有相关jar包,在Eclipse中需要手动找相关jar包然后到懂lib文件件下即可,哪些jar可以网上搜索;
2,编写Spring的配置XML文件,
常见文件名为applicationContext.xml,一般放在WEB-INF下某个地方,根据需要而定;
这个配置文件主要是用Spring框架来加载整合第三方或自己定义的各个工作Java Bean到Spring框架中,如果仅作可运行的例子可不需要定义任何的Bean;如果有其它的Bean,则可定义一个Bean并指出class的来源;
3,编写SpringMVC的配置XML文件,
默认常见文件名为servlet的名称-servlet.xml,一般放在WEB-INF下某个地方,根据需要而定;
SpringMVC的配置XML文件是扫描/加载实现SpringMVC的核心工作Java Bean到Spring框架中,对应的各个class文件在别人已经开发好的Spring的各jar包中,或者是用户自己开发的class文件(例如控制器类),最简单的是加载各个控制类classs文件和实现MVC分发请求所必须的DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个Bean即可,如下:
<!-- 启动时扫描某个包com.xxx.yyy下所有的controller -->
<context:component-scan base-package="com.xxx.yyy.controllers"/>
<!--
<mvc:annotation-driven />
这里等同下面两个Bean的定义,是Spring实现MVC分发请求所必须的
-->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="cacheSeconds" value="0"></property>
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
<!-- 负责读取和写入json格式的数据 -->
<!-- 没有这个Bean控制器中以JSON返回将出问题,也可在控制器内完成Bean到JSON的转换,然后以String返回到Client -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<!-- 负责读取字符串格式的数据和写出二进制格式的数据 -->
<bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
<!-- 负责读取资源文件和写出资源文件数据 -->
</list>
</property>
</bean>
如果想在配置文件中增加错误的处理,可加入如下Bean;
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="/resources/common/error.jsp" />
<!--Viewer资源路径可根据自己项目而定-->
<property name="exceptionMappings">
<props>
<prop key="org.springframework.web.servlet.PageNotFound">/resources/common/404.jsp</prop>
<prop key="org.springframework.web.DataAccessException">/resources/common/500.jsp</prop>
<prop key="org.springframework.transaction.TransactionException">/resources/common/500.jsp</prop>
<prop key="java.lang.Exception">/resources/common/error.jsp</prop>
</props>
</property>
</bean>
如果想在配置文件中增加上传功能的处理,可加入如下Bean;<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:defaultEncoding="utf-8">
<property name="maxUploadSize" value="2097160" />
</bean>
<!--maxUploadSize:2MB=2*1024*1024=2097152-->
<!-- 这里为全局上传大小定义;上传文件大小也可放到Controller中进行更灵活限制和管理 -->
如果想某些文件或文件夹下的资源不被DispatcherServlet处理,可以加入如下Bean;
<mvc:resources location="/resources/" mapping="/resources/**" />
<!-- 配置js,css等静态文件直接映射到对应的文件夹,不被DispatcherServlet处理 -->
如果想某些请求访问直接返回某些视图,增加如下的Bean;
<!-- 自定义的一些访问路径到视图的映射-->
<mvc:view-controller path="/" view-name="forword:/" />
<mvc:view-controller path="/login" view-name="/login" />
<mvc:view-controller path="/logout" view-name="/" />
如果想增加国际化言语区域的处理,增加如下Bean;<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="zh_CN"/>
</bean>
如果想增加国际化言语区域更换的处理,增加如下拦截Bean;
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
<!-- 根据请求中的参数名locale的值[zh_CN,en_US等]处理 -->
如果增加国际化处理,则相应的加入如下Bean,以加载国际化资源文件;
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="defaultEncoding" value="UTF-8" />
<property name="cacheSeconds" value="0" />
<property name="basenames">
<list>
<!--资源存放路径根据项目情况而定,仅列出基本名-->
<value>classpath:config/properties/Labels</value>
<value>classpath:config/properties/Messages</value>
</list>
</property>
</bean>
如果视图资源文件统一放在某个地方,可以增加如下Bean,统一处理所有试图的前缀和后缀;<!-- Spring关于视图的处理Bean -->
<bean name="veiwPS" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
4,在工程web.xml文件中加载Spring的配置文件和SpringMVC的配置文件,
web.xml是配置整个WEB应用程序启动时加载的各个工作资源,用Spring(Struts2)等框架已经提供的工作类来加载,
要实现SpringMVC则必须让应用程序加载SpringMVC配置文件中定义Bean资源,此外也加载其它功能用到Spring配置文件中
定义的各个Bean资源;
首先可用listener元素加载监听类org.springframework.web.context.ContextLoaderListener,用之来加载上下文参数中名为contextConfigLocation指定的配置文件,即Spring的配置文件中定义的各个工作Bean,
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
其实目的是加载Spring的配置文件中定义的各个工作Bean到应用程序中,这个加载工作也可以放到并连SpringMVC配置文件一起的完成加载,下面配置SpringMVC的Servlet(含对应配置文件)和配置Servlet处理映射请求资源类型;用Spring提供的资源org.springframework.web.servlet.DispatcherServlet给应用程序定义servlet,包含对应的配置文件,此外还配置该Servlet处理的对应资源类型;<servlet>
<servlet-name>spring3MVC-Dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/*.xml</param-value>
<!-- 扫描加载config下所有XML文件-->
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring3MVC-Dispatcher</servlet-name>
<url-pattern>/</url-pattern>
<!--
定义不同的匹配模式可定义不同访问资源,
如*.do是访问do后缀的资源,直接/即访问应用程序跟目录下的任何资源,即RestFul方式
-->
</servlet-mapping>
其它根据需要可自行定义;
如想自定义Session生命周期则,则加入如下定义;
<session-config>
<session-timeout>40</session-timeout><!--unit:minute-->
</session-config>
如想自定义错误处理,则加入如下定义;
<error-page>
<error-code>404</error-code>
<location>/resources/common/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/resources/common/500.jsp</location>
</error-page>
如想自定义默认访问页,则加入如下定义;<welcome-file-list>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
5,控制器的编写
当请求URL符合spring3MVC的映射资源时,请求便由对应的控制器来处理,
在控制器中完成相关的业务处理,然后返回到指定的视图,
但控制器类前面要加@Controller注解,以便告诉容器这是个控制器,
同时再加@RequestMapping("/*")注解,其路径可根据自己需要定义映射,方便告诉该控制器处理哪个URL,
例如下面:
@Controller
@RequestMapping("/*")
public class MainController {
@Autowired
private BookCategoryService<BookCategroy> bookCategoryService;
@RequestMapping(value = {"main"})
public String main(){
return "index";
}
@RequestMapping("login")
public String main(){
return "login";
}
@RequestMapping(value = {"getRequestParam","getRequestParam.htm"},
method = {RequestMethod.GET,RequestMethod.POST})
public @ResponseBody
String getRequestParam(@RequestParam(value="refId",required = false) String refId,
Model model) throws Throwable{
//model.addAttribute("pathVar", refId);
return refId;
}
//...other method...
}
6,视图的定义
就是JSP或HTML等视图资源,在浏览器端最终转换成HTML页面;视图是包控制器处理结果并显示结果给用户看的载体资源,存放位置可根据自己定义,有很多的视图资源时放到WEB-INF文件夹下,因客户端不能直接访问其下资源,安全性好,但可以由控制器访问;附例子,applicationContext.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:lang="http://www.springframework.org/schema/lang"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xmlns:oxm="http://www.springframework.org/schema/oxm"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<!--
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="order" value="1" />
<property name="locations">
<list>
<value>classpath:config/properties/config.properties</value>
</list>
</property>
</bean>
-->
<!-- 本示例采用DBCP连接池,应预先把DBCP的jar包复制到工程的lib目录下 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<!--
DB driverName:
mysql:com.mysql.jdbc.Driver; SQLServerV2005+:com.microsoft.sqlserver.jdbc.SQLServerDriver
DB URL:
mysql,URL:jdbc:mysql://localhost:3306/mybatis_spring?useUnicode=true&characterEncoding=UTF-8
SQLServerV2005+,URL:jdbc:sqlserver://localhost:1433;databaseName=YourDataBaseName
-->
<!--
<property name="driverClassName" value="${database.driverClassName}" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.userName}" />
<property name="password" value="${database.password}" />
-->
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=MyDBName" />
<property name="username" value="dbUser" />
<property name="password" value="dbPassword" />
<property name="initialSize" value="10" />
<property name="maxIdle" value="80" />
<property name="minIdle" value="10" />
<property name="maxActive" value="20" />
<property name="removeAbandoned" value="false" /><!-- true -->
<property name="removeAbandonedTimeout" value="600" /><!-- 自动回收超时时间(以秒数为单位) -->
<property name="maxWait" value="3000" /><!--超时等待时间以毫秒为单位-->
<property name="defaultAutoCommit" value="false" />
<property name="validationQuery">
<value>SELECT 1</value>
</property>
<property name="testOnBorrow">
<value>true</value>
</property>
<property name="testOnReturn">
<value>false</value>
</property>
</bean>
<!-- ========= MyBatis SqlSession配置 ======== -->
<!-- 使用SqlSessionFactoryBean工厂产生SqlSession对象,方便后期注入Dao -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation">
<value>classpath:config/Configuration.xml</value>
</property>
<property name="mapperLocations">
<list>
<!-- 扫描/加载各个映射数据库映射XML -->
<value>classpath:config/mybatis/*.xml</value>
</list>
</property>
</bean>
<!--
<bean id="bookCategoryServicesMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.gc.services.BookCategoryService"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
-->
<bean id="servicesMapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage">
<value>com.gc.services</value>
</property>
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<!-- ==========以下是事务有关========== -->
<!-- 用spring的AOP给代码添加事务管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="find*" read-only="true"/>
<tx:method name="list*" read-only="true" />
<tx:method name="query*" read-only="true" />
<tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="save*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="edit*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="insert*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="modify*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="remove*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="execute*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
<tx:method name="*" read-only="true" rollback-for="java.lang.Exception"/>
</tx:attributes>
</tx:advice>
<!-- 用spring AOP给service层的方法添加事务管理 -->
<aop:config>
<aop:pointcut id="bussinessService" expression="execution(public * com.gc.services..*.*(..))" />
<aop:advisor pointcut-ref="bussinessService" advice-ref="txAdvice" />
</aop:config>
<!-- 因无法自动完成Bean加载而需要人工手动定义Bean到Spring配置文件,这里完成加载 -->
<bean class="com.gc.validators.BookCategoryValidator"></bean>
<!-- 向Spring容器注册用户自定义并扩展了的某个验证器 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean class="com.gc.validators.SystemWebBindingInitializer"></bean>
</property>
</bean>
</beans>
附例子,名为spring3MVC-Dispatcher的servlet的配置文件spring3MVC-Dispatcher-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:oxm="http://www.springframework.org/schema/oxm"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd">
<!-- <import resource="config/xxx.xml"/> 导入其它配置文件 -->
<!-- 启动时扫描所有的controller -->
<context:component-scan base-package="com.gc.controllers"/>
<!--
主要作用于@Controller,激活该模式,下面是一种简写形式,完全可以手动配置替代这种简写形式,
它会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter,
是spring MVC为@Controllers分发请求所必须的
-->
<!-- <mvc:annotation-driven /> -->
<!--
spring MVC为 @Controllers 分发请求所必须的下面两个类
DefaultAnnotationHandlerMapping类和AnnotationMethodHandlerAdapter类
-->
<!-- 前面annotation-driven已经加载,这里再显示加载,并列出需要的类 -->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="cacheSeconds" value="0"></property>
<property name="messageConverters">
<list>
<!-- <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> -->
<!-- 负责读取和写入json格式的数据 -->
<!-- 没有这个Bean那控制器中以JSON返回将出问题,在控制器内完成Bean到JSON的转换,然后以String返回到Client -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<!-- 负责读取字符串格式的数据和写出二进制格式的数据 -->
<bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
<!-- 负责读取资源文件和写出资源文件数据 -->
</list>
</property>
</bean>
<!-- 配置js,css等静态文件直接映射到对应的文件夹,不被DispatcherServlet处理 -->
<mvc:resources location="/resources/" mapping="/resources/**" />
<!-- 自定义的一些访问路径到视图的映射-->
<mvc:view-controller path="/" view-name="forword:/" />
<mvc:view-controller path="/login" view-name="/login" />
<mvc:view-controller path="/logout" view-name="/" />
<!-- session 解析区域,默认的区域 -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="zh_CN"/>
</bean>
<!--
上面是locale转换成真正的Locale对象,然后将对象保存在Session中,比较好,
下面是基于请求头信息和Cookie方式的国际化
-->
<!--
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver">
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/>
-->
<!-- 链接请求式i18n国际化、网址拦截器 -->
<!--
拦截请求参数 locale=zh_CN|en_US
参考:http://chinaxxren.iteye.com/blog/794899
http://xph.iteye.com/blog/1695199
http://chinaxxren.iteye.com/blog/794899
-->
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
<!--
为了使用国际化信息源,Spring MVC 必须实现MessageSource接口。
我们需要做的是注册一个MessageSource类型的Bean。
Bean的名称必须为messageSource,从而方便DispatcherServlet自动检测它。
每个DispatcherServlet只能注册一个 信息源的Bean,但该Bean中可列出需要的多个资源文件
-->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="defaultEncoding" value="UTF-8" />
<property name="cacheSeconds" value="0" />
<property name="basenames">
<list>
<value>classpath:config/properties/Labels</value>
<value>classpath:config/properties/Messages</value>
</list>
</property>
</bean>
<!-- <property name="basename" value="classpath:/config/properties/messages" /> 仅单个资源文件-->
<!-- Application Message Bundle 国际化信息源另一写法 -->
<!--
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:/config/properties/messages" />
<property name="cacheSeconds" value="0" />
</bean>
-->
<!--
Spring负责处理上传问题的Bean,
-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:defaultEncoding="utf-8">
<property name="maxUploadSize" value="2097160" />
</bean>
<!--maxUploadSize:2MB=2*1024*1024=2097152-->
<!-- 这里为全局上传大小定义;上传文件大小也可放到Controller中进行更灵活限制和管理 -->
<!-- Spring关于的错处处理方式 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- <property name="defaultErrorView" value="/resources/common/error.jsp" /> -->
<property name="exceptionMappings">
<props>
<prop key="org.springframework.web.servlet.PageNotFound">/resources/common/404.jsp</prop>
<prop key="org.springframework.web.DataAccessException">/resources/common/500.jsp</prop>
<prop key="org.springframework.transaction.TransactionException">/resources/common/500.jsp</prop>
<prop key="java.lang.Exception">/resources/common/error.jsp</prop>
</props>
</property>
</bean>
<!-- Spring关于视图的处理Bean -->
<bean name="veiwPS" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
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_3_0.xsd">
<display-name>Spring3MVC-J2EE018</display-name>
<!--
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
-->
<!--
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
-->
<filter>
<filter-name>encodingFilter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- Filter 映射 -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--Spring的ApplicationContext 载入 -->
<!--
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
-->
<!-- Spring 刷新Introspector防止上下文Context内存泄露 -->
<!-- <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> -->
<!--
<listener>
<listener-class>org.springframework.web.context.ContextCleanupListener</listener-class>
</listener>
-->
<!-- Spring 加载Log配置文件 -->
<!--
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
-->
<!-- 指定Spring3 MVC 的分配/转发器 -->
<servlet>
<servlet-name>spring3MVC-Dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/*.xml</param-value>
<!-- 扫描加载所有xml文件 -->
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- 配置spring3MVC-Dispatcher映射器,作用的目标资源 -->
<servlet-mapping>
<servlet-name>spring3MVC-Dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 单位:分钟 -->
<session-config>
<session-timeout>40</session-timeout>
</session-config>
<error-page>
<error-code>404</error-code>
<location>/resources/common/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/resources/common/500.jsp</location>
</error-page>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
整理写下方便参考,