1. 程式人生 > >SpringMVC 入門案例

SpringMVC 入門案例

SpringMVC的元件

前端控制器(DispatcherServlet)

本質上是一個Servlet,相當於一箇中轉站,所有的訪問都會走到這個Servlet中,再根據配置進行中轉到相應的Handler(Controller)中進行處理,獲取到資料和檢視後,在使用相應檢視做出響應。

處理器對映器(HandlerMapping)

本質上就是一段對映關係,將訪問路徑和對應的Handler(Controller)儲存為對映關係,在需要時供前端控制器查閱。

處理器介面卡(HandlerAdapter)

本質上是一個介面卡,可以根據要求找到對應的Handler(Controller)來執行。前端控制器通過處理器對映器找到對應的Handler資訊之後,將請求響應和對應的Handler資訊交由處理器介面卡處理,處理器介面卡找到真正handler執行後,將結果即model和view返回給前端控制器

檢視解析器(ViewResolver)

本質上也是一種對映關係,可以將檢視名稱對映到真正的檢視地址。前端控制器呼叫處理器適配完成後得到model和view,將view資訊傳給檢視解析器得到真正的view。

圖解

SpringMVC入門案例

建立web專案,並匯入SpringMVC相關開發包

 

配置前段控制器

本質上是一個servlet,在當前web專案中配置該servlet

  <servlet>
      <servlet-name>springmvc</servlet-name>
      <servlet-class
>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>

生成SpringMVC的核心配置檔案

SpringMVC會自動去尋找 [前端控制前ServletName]-servlet.xml

作為當前SpringMVC的核心配置檔案。

建立這個檔案,這個檔案本身其實就是Spring的配置檔案,所以匯入Spring相關的約束資訊,包括 beans、context、mvc

<?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:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd">
    
            
</beans>

建立控制器,編寫程式碼

想要開發一個控制器,寫一個類實現Controller介面,在其中的handlerRequest中編寫程式碼處理請求,並將處理好的資料和目標檢視封裝到ModelAndView中返回

 

package cn.tedu.springmvc.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 Hello implements Controller {

    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        // 1.建立 modelandview 物件
        ModelAndView mav = new ModelAndView();
        // 2.封裝資料
        mav.addObject("msg1","hello,world");
        mav.addObject("msg2", "hello,springmvc");
        // 3.封裝檢視
        mav.setViewName("hello");
        //4.返回ModelAndVeiw
        return mav;
    }
}

配置處理器對映器中的路徑和處理器的對映關係

<!-- 配置處理器對映器的路徑和控制器的對映關係  -->
<bean name="/hello.action" class="cn.tedu.springmvc.controller.Hello"></bean>

配置檢視解析器

 通過在檢視名稱中加入字首(prefix)和字尾(suffix),得到真正的檢視地址。

    <!-- 配置檢視解析器中 檢視名稱 和 真正檢視頁面的對映關係 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

開發檢視

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
    <head>
    </head>
    <body>
        welcome!
        <hr>
        <p>${msg1}</p>
        <p>${msg2}</p>
        <%=new Date() %>
    </body>
</html>

釋出應用,通過瀏覽器訪問

 

原始碼

 

原始碼

package cn.tedu.springmvc.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 Hello implements Controller {

    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        // 1.建立 modelandview 物件
        ModelAndView mav = new ModelAndView();
        // 2.封裝資料
        mav.addObject("msg1","hello,world");
        mav.addObject("msg2", "hello,springmvc");
        // 3.封裝檢視
        mav.setViewName("hello");
        //4.返回ModelAndVeiw
        return mav;
    }
}
Hello.java
<?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:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd">
    
    <!-- 配置處理器對映器的路徑和控制器的對映關係  -->
    <bean name="/hello.action" class="cn.tedu.springmvc.controller.Hello"></bean>
    
    <!-- 配置檢視解析器中 檢視名稱 和 真正檢視頁面的對映關係 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>    
</beans>
springmvc-servlet.xml
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
    <head>
    </head>
    <body>
        welcome!
        <hr>
        <p>${msg1}</p>
        <p>${msg2}</p>
        <%=new Date() %>
    </body>
</html>
hello.jsp
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    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_2_5.xsd">
  
  <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:/springmvc-servlet.xml</param-value>        
    </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>springmvc</servlet-name>
      <url-pattern>*.action</url-pattern>
  </servlet-mapping>
  
</web-app>
web.xml