SpringMVC(用于表現(xiàn)層)概述
- 是一種基于
Java實(shí)現(xiàn)的MVC設(shè)計(jì)模型的請(qǐng)求驅(qū)動(dòng)類型的輕量級(jí)WEB框架。 -
Spring MVC屬于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面。Spring 框架提供
了構(gòu)建 Web 應(yīng)用程序的全功能 MVC 模塊。 - 使用 Spring 可插入的 MVC 架構(gòu),從而在使用Spring進(jìn)行WEB開發(fā)時(shí),可以選擇使用Spring的
SpringMVC框架或集成其他MVC開發(fā)框架,如Struts1(現(xiàn)在一般不用),Struts2等。
SpringMVC入門
解決maven加載webapp過(guò)慢問(wèn)題
---archetypeCatalog
---internal
需引入spring-context、spring-web、spring-webmvc、servlet-api以及jsp-api
maven引入所需的jar包
<?xml version="1.0" encoding="UTF-8"?>
<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.ygg</groupId>
<artifactId>yggtzsj</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>yggtzsj Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<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>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<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>
</dependencies>
<build>
<finalName>yggtzsj</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
web.xml配置Servlet的映射
<!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>
<!-- SpringMVC核心控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置Servlet的初始化參數(shù),讀取springmvc的配置文件,創(chuàng)建spring容器 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 配置servlet啟動(dòng)時(shí)加載對(duì)象 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
配置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.ygg"/>
<!-- 視圖解析器對(duì)象 -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- 開啟SpringMVC框架注解的支持 -->
<mvc:annotation-driven></mvc:annotation-driven>
</beans>
目錄結(jié)構(gòu)如下:

配置前端控制器的class文件
package com.ygg.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 控制器
* @author rt
*/
@Controller
public class HelloController {
/**
* 接收請(qǐng)求
* @return
*/
@RequestMapping(path = "/hello")
public String sayHello() {
System.out.println("Hello SpringMVC!!");
return "success";
}
}
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>入門成功</h3>
</body>
</html>
success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>入門成功</h3>
</body>
</html>
配置完成
開始驗(yàn)證是否配置成功

SpringMVC的請(qǐng)求流程


請(qǐng)求綁定入門
一. 綁定機(jī)制
- 表單提交的數(shù)據(jù)都是k=v格式的 username=haha&password=123
- SpringMVC的參數(shù)綁定過(guò)程是把表單提交的請(qǐng)求參數(shù),作為控制器中方法的參數(shù)進(jìn)行綁定的
- 要求:提交表單的name和參數(shù)的名稱是相同的
二. 支持的數(shù)據(jù)類型 - 基本數(shù)據(jù)類型和字符串類型
- 實(shí)體類型(JavaBean)
- 集合數(shù)據(jù)類型(List、map集合等)
三. 實(shí)體類型(JavaBean) - 提交表單的name和JavaBean中的屬性名稱需要一致
- 如果一個(gè)JavaBean類中包含其他的引用類型,那么表單的name屬性需要編寫成:對(duì)象.屬性 例如:address.name
創(chuàng)建Account類作為JavaBean
package com.ygg.domain;
import java.io.Serializable;
public class Account implements Serializable {
private String username;
private String password;
private String money;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getMoney() {
return money;
}
public void setMoney(String money) {
this.money = money;
}
@Override
public String toString() {
return "Account{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", money='" + money + '\'' +
'}';
}
}
param.jsp來(lái)發(fā)送數(shù)據(jù)
<%--請(qǐng)求參數(shù)的綁定--%>
<%--<a href="param/testParam?username=hehe">請(qǐng)求參數(shù)綁定</a>--%>
<form action="/param/saveAccount" method="post">
姓名:<input type="text" name="username"/><br/>
密碼:<input type="text" name="password"/><br/>
金額:<input type="text" name="money"/><br/>
<input type="submit" value="提交" />
</form>
ParamController類作為前端控制器
package com.ygg.controller;
import com.ygg.domain.Account;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/param")
public class ParamController {
@RequestMapping("/testParam")
public String testParam(String username){
System.out.println("執(zhí)行了...");
System.out.println(username);
return "success";
}
@RequestMapping("/saveAccount")
public String saveAccount(Account account){//這里直接引入Account它能自動(dòng)封裝
System.out.println("賬戶數(shù)據(jù)"+account);
return "success";
}
}

解決中文亂碼問(wèn)題
配置一個(gè)解決亂碼的過(guò)濾器
<!-- 解決中文亂碼-->
<filter>
<filter-name>characterEncodingFilter</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>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>