可運行的附件地址:http://files.cnblogs.com/files/douJiangYouTiao888/springWithXML.zip
項目說明:
作者環境:maven3+jdk1.8+spring4
項目結構:
父pom:主要是進行一系列版本定義
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!-- 基礎組件模塊,定義各種公用的組件 --> <modelVersion>4.0.0</modelVersion> <groupId>com.wang</groupId> <artifactId>basicmodule</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>basicmodule</name> <url>http://maven.apache.org</url> <!-- 常量屬性 --> <properties> <!-- 編碼集 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- spring版本 --> <springframework.version>4.3.7.RELEASE</springframework.version> </properties> <!-- 模塊定義 --> <dependencyManagement> <dependencies> <!-- spring模塊 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${springframework.version}</version> </dependency> <!-- servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <!-- <scope>provide</scope> --> </dependency> <!-- jstl,需要引入jstl.jar和standard.jar --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provide</scope> </dependency> --> </dependencies> </dependencyManagement> </project>
當前pom:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wang</groupId> <artifactId>springWithXML</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>springWithXML Maven Webapp</name> <url>http://maven.apache.org</url> <!-- 父模塊,基礎模塊 --> <parent> <groupId>com.wang</groupId> <artifactId>basicmodule</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <dependencies> <!-- springMVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <!-- servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> <!-- jstl --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> </dependencies> <build> <finalName>sprintWithXML</finalName> </build> </project>
web.xml
<?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"> <!-- 源碼:spring-web.jar 功能:字符集過濾器,設置編碼集為UTF-8,解決POST的中文亂碼問題。 參數說明: encoding:request的編碼集(request.setCharacterEncoding("UTF-8")) forceEncoding:默認為false設置為true,response的編碼集也強制轉變成UTF-8(response.setCharacterEncoding("UTF-8")) --> <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> <!-- 源碼:spring-web.jar 默認配置:/WEB-INF/${servlet-name}-servlet.xml,即/WEB-INF/wly-servlet.xml 覆蓋默認配置:初始化參數:contextConfigLocation,參數多個值使用逗號隔開,如:a.xml,b.xml --> <servlet> <servlet-name>wly</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:wly-servlet.xml</param-value> </init-param> <!-- 容器初始化加載此servlet --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>wly</servlet-name> <!-- 一般有以下寫法: *.do 攔截固定格式的請求 / rest風格的寫法:攔截所有資源,需要針對靜態資源做單獨處理 /* 錯誤寫法:會在處理完請求后攔截jsp導致404錯誤 --> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 測試使用的servlet --> <servlet> <servlet-name>testServlet</servlet-name> <servlet-class>com.wang.servlet.TestServlet</servlet-class> </servlet> </web-app>
springmvc核心配置文件:wly-servlet.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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"> <!-- 公共配置,默認配置在org.springframework.web.servlet.Dispatcher類同包DispatcherServlet.properties下 --> <!-- HandlerMapping,映射器,配置的bean.name對應請求的url,將請求的url映射為一個HandlerExecutionChain對象(包含一個Handler和多個HandlerInterceptor) --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- HandlerAdapter,將handler包裝為適配器,滿足各種不同適配器的使用,Controller、SimpleFormController等 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!-- ViewResovler,將拼接視圖邏輯名稱轉為物理視圖 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 需要引入jstl的相關jar包,jstl1.2以下需要引入jstl.jar、standard.jar --> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 靜態資源處理,不攔截靜態資源 --> <mvc:resources location="/" mapping="/**/*.js"></mvc:resources> <!-- handler,處理器,需要開發實現 --> <bean name="/wang" class="com.wang.controller.WangController"/> <!-- 接口return null的情況代表已經把輸出通過流的形式返回,無需進行視圖的解析 --> <bean name="/testNull" class="com.wang.controller.NullController"/> <!-- GET、POST請求方式的限定,supportedMethods需要配合AbstractController使用 --> <bean name="/helloPost" class="com.wang.controller.HelloController"> <property name="supportedMethods" value="POST"></property> </bean> <!-- 緩存響應信息 --> <bean name="/helloCache" class="com.wang.controller.HelloController"> <!-- 默認為-1,>0的值代表緩存時間 --> <property name="cacheSeconds" value="8"></property> </bean> <!-- 請求轉發給servlet來處理 --> <bean name="/helloServlet" class="org.springframework.web.servlet.mvc.ServletForwardingController"> <!--value對應web.xml的<servlet-name>--> <property name="servletName" value="testServlet"></property> </bean> </beans>
java類:
package com.wang.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; public class HelloController extends AbstractController{ @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { System.err.println("deal request"); ModelAndView mv =new ModelAndView(); //模型 mv.addObject("message","test"); //視圖 mv.setViewName("index"); return mv; } }
package com.wang.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class NullController implements Controller{ public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { response.getWriter().write("<a href=''>this</a>"); //return null給DispatcherServlet,即告知servlet無需進行視圖解析。 return null; } }
package com.wang.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class WangController implements Controller { public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { System.err.println("deal request!"); ModelAndView mv =new ModelAndView(); //模型 mv.addObject("message","test"); //視圖 mv.setViewName("index"); return mv; } }
package com.wang.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.err.println("servlet處理"); resp.sendRedirect("index.jsp"); } }
測試URL:
http://ip:port/具體URL
1.Controller返回ModeAndView:/wang
2.Controller返回null:/testNull
3.只接受POST請求:/helloPost
4.緩存響應信息:/helloCache
5.請求轉發給servlet來處理:/helloServlet
例:http://localhost:8088/wang
OK,大功告成~