SpringMVC學習(二)——基於xml配置的springMVC項目(maven+spring4)


可運行的附件地址: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,大功告成~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM