Spring MVC快速體驗

Spring MVC 快速體驗的五個步驟: 1. 配置web.xml 2. 創建Spring配置文件applicationContext.xml 3. 創建model 4. 創建controller 5. 創建視圖文件userlist.jsp 6. 創建Servlet配置文件Spring-servlet.xml

1. 配置web.xml

一個web中可以沒有web.xml文件,也就是說,web.xml文件並不是Web工程必須的。web.xml文件用來初始化配置信息:比如Welcome頁面、servlet、servlet-mapping、filter、listener、啓動加載級別等。 下面來看看Spring MVC中web.xml文件的配置方法:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <!-- 使用ContextLoaderListener配置時,需要告訴它Spring配置文件的未知-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

    <!-- SpringMVC的前端控制器 -->
    <!-- 當 DispatcherServlet 載入後,會從Spring-servlet.xml文件中加載Spring應用的上下文-->
    <!-- DispatcherServlet 主要用來加載包含Web組件的bean,如控制器、視圖解析器 以及 處理器映射-->
    <servlet>
        <servlet-name>Springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:Spring-servlet.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>Springmvc</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>

    <!--配置上下文載入器-->
    <!-- 上下文載入器載入除DispatcherServlet加載的其它應用中的bean。這些bean通常是驅動應用後端的中間層和數據層組件 -->
    <!-- 最常用的上下文載入器是一個Servlet監聽器,其名稱爲ContextLoaderListener-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

Spring的MVC之所以必須要配置web.xml,其實最關鍵的是要配置兩個地方。

  • contextConfigLocation:Spring的核心就是配置文件,可以說配置文件是Spring中必不可少的東西,而這個參數就是使Web和Spring的配置文件相結合的一個關鍵配置。
  • DispatcherServlet:包含了SpringMVC的請求邏輯,Spring使用此類攔截Web請求並進行相應的邏輯處理。DispatcherServlet 將試圖從一個叫做 <servlet-name>-servlet.xml的文件中載入應用上下文,其默認位於WEB-INF目錄下。也可以通過contextConfigLocation來自定義位置。

2. 創建Spring配置文件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"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

InternalResourceViewResolver是一個輔助Bean,會在ModelAndView返回的視圖名前加上prefix指定的前綴,再在最後加上suffix指定的後綴。

3. 創建model

模型對於SpringMVC來說必不可少,如果處理程序非常簡單,完全可以忽略。模型創建主要的目的就是承載數據,使數據傳輸更加方便。

public class User {
    private String username;
    private Integer age;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

4. 創建controller

控制器用於處理Web請求,每個控制器都對應着一個邏輯處理。

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;

public class UserController extends AbstractController {
    protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        List<User> userList = new ArrayList<User>();
        User userA = new User();
        User userB = new User();
        userA.setUsername("zhangsan");
        userA.setAge(12);

        userB.setUsername("lisi");
        userB.setAge(12);
        userList.add(userA);
        userList.add(userB);
        return new ModelAndView("userlist", "users", userList);
    }
}

請求的最後返回了ModelAndView類型的實例。ModelAndView類在SpringMVC中佔有很重要的地位,控制器執行方法都必須返回一個ModelAndView,ModelAndView對象保存了視圖以及視圖顯示的模型數據,例如其中的參數如下。

  • 第一個參數userlist:視圖組件的邏輯名稱。這裏視圖的邏輯名稱就是userlist,視圖解析器會使用該名稱查找實際的View對象。
  • 第二個參數users:傳遞給視圖的,模型對象的名稱。
  • 第三個參數userList:傳遞給視圖的,模型對象的值。

5. 創建視圖文件userlist.jsp。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>This is SpringMVC demo pages</title>
</head>
<body>
    <c:forEach items="${users}" var="user">
        <c:out value="${user.username}"></c:out>
        <br>
        <c:out value="${user.age}"></c:out>
        <br>
    </c:forEach>
</body>
</html>

視圖文件用於展現請求處理結果,通過對JSTL的支持,可以很方便的展現在控制器中放入ModelAndView中的處理結果數據。

6. 創建Servlet配置文件Spring-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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/userlist.htm">userController</prop>
            </props>
        </property>
    </bean>
    <!-- 這裏的 id="userController"對應的是<bean id="simpleUrlMapping">中的<prop>裏面的value-->
    <bean id="userController" class="UserController"/>
</beans>

因爲SpringMVC是基於Servlet的實現,所以在Web啓動的時候,服務器會首先嚐試加載對應於Servlet的配置文件,而爲了讓項目更加模塊化,通常我們將Web部分的配置都存放於此配置文件中。 至此,已經完成了SpringMVC的搭建,啓動服務器,輸入網址 http://localhost:8080/SpringMVC/userlist.html。 可以看到服務器返回界面,如下圖所示。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章