SpringMVC-輕量級Web框架

SpringMVC

SpringMVC框架是一個基於請求驅動的Web框架,並且使用了前段控制器模式來進行設計,再根據請求映射規則分發給相應的頁面控制器(動作/處理器)進行處理

SpringMVC處理請求的流程


具體執行步驟如下
  1. 首先用戶發送請求——>前端控制器,前端控制器根據請求信息(URL)來決定選擇哪一個頁面控制器進行處理並把請求委託給它
  2. 頁面控制器接收到請求後,進行功能處理,首先需要收集和綁定請求參數到一個對象,這個對象在SpringMVC中叫命令對象,並進行驗證,然後將命令對象委託給業務對象進行處理,處理完畢後返回一個ModelAndView(模型數據和邏輯視圖名)
  3. 前端控制器收回控制權,然後根據返回的邏輯視圖名,選擇相應的視圖進行渲染,並把模型數據傳入以便視圖渲染
  4. 前端控制器再次收回控制權,將相應返回給用戶,至此結束

SpringMVC核心架構


核心架構的處理流程如下
  1. 首先用戶發送請求——>DispatcherServlet,前端控制器收到請求後自己不進行處理,而是委託給其他的解析器進行處理,作爲統一訪問點,進行全局的流程控制
  2. DisptcherServlet——>HandlerMapping,HanderMapping將會請求映射爲HandlerExecutionChain對象(包含一個Handler處理器(頁面控制器)對象,多個HandlerInterceptor攔截器)對象,通過這種策略,很容易添加新的映射策略
  3. DisptcherServlet——>HandlerAdapter,HandlerAdapter將會把處理器包裝爲適配器,從而支持多種類型的處理器,即適配器設計模式的應用
  4. HandlerAdapter——>處理器功能處理方法的調用,HandlerAdapter將會根據適配的結果調用真正的處理器的功能處理方法,完成功能處理,並返回一個ModelAndView對象(包含模型數據,邏輯視圖名)
  5. ModelAndView的邏輯視圖名——>ViewResolver,ViewResolver將把邏輯視圖名解析爲具體的View,通過這種策略模式,很容易更換其他視圖技術
  6. View——>渲染,View會根據傳進來的Model模型數據進行渲染,此處的Model實際是一個Map數據結構,因此很容易支持其他視圖技術
  7. 返回控制權給DisptcherServlet,由DisptcherServlet返回響應給用戶,到此一個流程結束

SpringMVC核心開發步驟

  1. DisptcherServlet在web.xml中的部署描述,從而攔截請求到SpringMVC
  2. HandlerMapping的配置,從而將請求映射到處理器
  3. HandlerAdapter的配置,從而支持多種類型的處理器
  4. ViewResolver的配置,從而將邏輯視圖名解析爲具體視圖技術
  5. 處理器(頁面控制器)的配置,從而進行功能處理

SpringMVC開發實例(Hello World)

開發環境,運行環境,工程:eclipse Jee  Neon + tomcat8.0.36 + Dynamic Web Project


導入jar包到WebContent/WEB-INF/lib目錄


JSP視圖

在WebContent目錄下新建一個index.jsp文件
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 <title>Spring 3.0 MVC demo</title>
</head>
<body>
 <a href="hello.html">Say Hello</a>
</body>
</html>
再在WebContent/jsp目錄下新建一個hello.jsp文件
<pre name="code" class="java"><%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Spring mvc demo</title>
</head>
<body>
<p> This is my message: ${message} </p>
</body>
</html>

前端控制器的配置

在WEB-INF目錄下配置web.xml
<?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">
 
    <display-name>Spring3MVC</display-name>
    <servlet>
    	
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- load-on-startup:表示啓動容器時初始化該Servlet; -->
        <load-on-startup>1</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <!-- url-pattern:表示哪些請求交給Spring Web MVC處理, “/” 是用來定義默認servlet映射的。 -->
		<!-- 也可以如“*.html”表示攔截所有以html爲擴展名的請求。 -->
        <url-pattern>/</url-pattern>
     </servlet-mapping>
 
     <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
 
 	<!-- 自此請求已交給Spring Web MVC框架處理,因此我們需要配置Spring的配置文件, -->
 	<!-- 默認DispatcherServlet會加載WEB-INF/[DispatcherServlet的Servlet名字,也就是上面的spring]-servlet.xml配置文件。 -->
 	<!-- 即spring-servlet.xml -->
 
</web-app>

配置Spring配置文件

在WEB-INF目錄下配置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"
 xmlns:p="http://www.springframework.org/schema/p"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-3.0.xsd">
   
 <context:component-scan base-package="net.spring.controller" />
 
<!-- 在Spring配置文件中配置ViewResolver -->
<!-- InternalResourceViewResolver:用於支持Servlet、JSP視圖解析;
     viewClass:JstlView表示JSP模板頁面需要使用JSTL標籤庫,classpath中必須包含jstl的相關jar包;
	 prefix和suffix:查找視圖頁面的前綴和後綴(前綴[邏輯視圖名]後綴),
	 比如傳進來的邏輯視圖名爲hello,則該該jsp視圖頁面應該存放在“WEB-INF/jsp/hello.jsp”;    -->
	<bean id="viewResolver"
  		class="org.springframework.web.servlet.view.UrlBasedViewResolver">
  		<property name="viewClass"
   		value="org.springframework.web.servlet.view.JstlView" />
  		<property name="prefix" value="/WEB-INF/jsp/" />
  		<property name="suffix" value=".jsp" />
	</bean>
</beans>

編寫Controller和Mapping(開發處理器/頁面控制器)

在Java Resources/src目錄下新建一個包:com.springmvc.controller,在包下新建一個HelloWorldController.java文件
package net.spring.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
 
@Controller
public class HelloWorldController {
 
 @RequestMapping("/hello")
 public ModelAndView helloWorld() {
 
  String me = "Hello World, Spring 3.0!";
  //ModelAndView: 包含了試圖要實現的模型數據和邏輯視圖名
  //message 爲數據的名稱,在視圖中用來引用的名字
  //me 是對應的值
  //hello 是對應視圖的名字。
  ModelAndView modelAndView = new ModelAndView();
  modelAndView.addObject("message", me);
  modelAndView.setViewName("hello");
  return modelAndView;
  
  //以上4個語句相當於一下一句:
  //return new ModelAndView("hello","message",me);
 }
}

工程目錄



發佈了10 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章