1 SpringMVC在三層架構的位置
1.1 優點
- 清晰的角色劃分:
- 前端控制器(
DispatcherServlet
) - 請求到處理器映射(
HandlerMapping
) - 處理器適配器(
HandlerAdapter
) - 視圖解析器(
ViewResolver
) - 處理器或頁面控制器(
Controller
) - 驗證器(
Validator
) - 命令對象(
Command
請求參數綁定到的對象就叫命令對象) - 表單對象(
Form Object
提供給表單展示和提交到的對象就叫表單對象)。
- 分工明確,而且擴展點相當靈活,可以很容易擴展,雖然幾乎不需要。
- 由於命令對象就是一個POJO,無需繼承框架特定API,可以使用命令對象直接作爲業務對象。
- 和Spring 其他框架無縫集成,是其它Web框架所不具備的
- 可適配,通過HandlerAdapter可以支持任意的類作爲處理器。
- 可定製性,HandlerMapping、ViewResolver等能夠非常簡單的定製。
- 功能強大的數據驗證、格式化、綁定機制。
- 利用Spring提供的Mock對象能夠非常簡單的進行Web層單元測試。
- 本地化、主題的解析的支持,使我們更容易進行國際化和主題的切換。
- 強大的JSP標籤庫,使JSP編寫更容易。 ………………還有比如RESTful風格的支持、簡單的文件上傳、約定大於配置的契約式編程支持、基於註解的零配置支持等等。
1.2 SpringMVC和Struts2的優略分析
共同點:
- 它們都是表現層框架,都是基於MVC模型編寫的。
- 它們的底層都離不開原始ServletAPI。
- 它們處理請求的機制都是一個核心控制器。
區別:
- Spring MVC 的入口是 Servlet, 而 Struts2 是 Filter
- Spring MVC 是基於方法設計的,而Struts2是基於類,Struts2每次執行都會創建一個動作類。所以Spring MVC 會稍微比 Struts2 快些。
- Spring MVC 使用更加簡潔,同時還支持 JSR303, 處理 ajax 的請求更方便 (JSR303 是一套JavaBean參數校驗的標準,它定義了很多常用的校驗註解,我們可以直接將這些註解加在我們JavaBean的屬性上面,就可以在需要校驗的時候進行校驗了。)
- Struts2 的OGNL 表達式使頁面的開發效率相比Spring MVC 更高些,但執行效率並沒有比JSTL提升,尤其是struts2的表單標籤,遠沒有html執行效率高。
2 環境搭建
- pom
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
2.1 配置前端控制器
- web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
2.2 spring mvc 配置文件
2.3 部署服務器
3 入門案例
3.1 spring mvc 配置文件
- springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--開啓註解掃描-->
<context:component-scan base-package="com.tzb"></context:component-scan>
</beans>
3.2 web.xml 加載 spring mvc 配置文件
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--加載 spring mvc 配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--啓動服務器就創建 DispatcherServlet 對象-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
3.3 配置視圖解析器,打開mvc 註解支持
springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--開啓註解掃描-->
<context:component-scan base-package="com.tzb"></context:component-scan>
<!--視圖解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!--開啓Spring MVC 框架註解的支持-->
<mvc:annotation-driven></mvc:annotation-driven>
</beans>
3.4 寫一個成功頁面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>成功頁面</title>
</head>
<body>
成功頁面
</body>
</html>
3.5 Controller
package com.tzb.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping(path = "/hello")
public String sayHello() {
System.out.println("hello world!");
return "success";
}
}
3.6 index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>主頁</title>
</head>
<body>
<h3>入門程序</h3>
<a href="/hello">入門程序</a>
</body>
</html>
啓動服務器測試