方法一:最简单的(已测试)
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>xxx</display-name> <!-- 使controller中可以直接使用request和response对象 --> <!-- <listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener> --> <!-- 编码拦截 --> <!-- <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-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> --> <!-- springmvc --> <servlet> <servlet-name>app</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>app</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- 欢迎页面 --> <!-- <welcome-file-list> <welcome-file>/login.jsp</welcome-file> </welcome-file-list> --> <!-- session 有效时间 ,单位是分 --> <!-- <session-config> <session-timeout>120</session-timeout> </session-config> --> </web-app>已经注释掉的都是可有可无的配置,就不解释了,由于没有指定springmvc的配置文件位置,spring会采用默认加载方式:/WEB-INF/servlet-name + 'servlet.xml',
显然 我们这里servlet-name是app,那么spring会默认找/WEB-INF/app-servlet.xml (注意默认加载的路劲是/WEB-INF/)
方法一:指定特定名称的配置文件(已测试)
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>xxx</display-name> <!-- 使controller中可以直接使用request和response对象 --> <!-- <listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener> --> <!-- 编码拦截 --> <!-- <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-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> --> <!-- springmvc --> <servlet> <servlet-name>app</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/abc-context.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>app</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- 欢迎页面 --> <!-- <welcome-file-list> <welcome-file>/login.jsp</welcome-file> </welcome-file-list> --> <!-- session 有效时间 ,单位是分 --> <!-- <session-config> <session-timeout>120</session-timeout> </session-config> --> </web-app>
<init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/abc-context.xml</param-value> </init-param>如果你想将springmvc不同的配置(如:application上下文,数据库配置,bean的初始化,事务,以及关于HandleMapping、ViewResolver等的初始化)放在不同的xml里,便于管理
可以通过在abc-context.xml中加入:
<import resource="a-mysql.xml"/> <pre name="code" class="html"><import resource="b-beans.xml"/>
<pre name="code" class="html"><init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/abc-context.xml,/WEB-INF/a-context.xml,/WEB-INF/b-context.xml</param-value> </init-param>
下面与本题无关,是关于网上对于springmvc配置的一些奇怪方式,不是很理解
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>xxx</display-name> <!-- springmvc --> <servlet> <servlet-name>app</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>app</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- 不解之处 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/a.xml,/WEB-INF/b.xml,/WEB-INF/c.xml</param-value> </context-param> </web-app>首先,由于web.xml中 DispatcherServlet未指定
<init-param>
应该采用默认方式,加载/WEB-INF/app-servlet.xml ,直接用我介绍的方式多好,为嘛还要用ContextLoaderListener 去装载另一个xml,
我测试了下,如果如下配置:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>xxx</display-name> <!-- springmvc --> <servlet> <servlet-name>app</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>app</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!--不解之处--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/app-servlet.xml</param-value> </context-param> </web-app>
app-servlet.xml被加载了2遍,所以我个人认为,当你采用springmvc时,没有必要放入:
<!--不解之处--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/app-servlet.xml</param-value> </context-param>