![ ](黑马57_SpringMVC·.assets/ .png)
============================================
01.SpringMVC概述及入门案例
01.三层架构介绍和MVC设计模型介绍
02.SpringMVC框架的介绍
03.入门程序之需求分析
04.入门程序之搭建开发环境
05.入门程序之入门代码编写
06.入门案例的流程总结
入门案例的流程总结 .png
![](.assets/入门案例的流程总结 .png)
07.入门案例中使用的组件介绍
入门案例中使用的组件介绍.png
源码:hellospringmvc11
08.RequestMapping注解的作用
09.RequestMapping注解的属性
============================================
02.参数绑定及自定义类型转换
1 请求参数绑定入门
<a href="param/testParam?username=hehe&password=123">请求参数绑定</a>
@Controller
@RequestMapping("/param")
public class ParamController {
/**
* 请求参数绑定入门
* http://localhost:8080/param/testParam
* @return
*/
@RequestMapping("/testParam")
public String testParam(String username,String password){
System.out.println("执行了...");
System.out.println("username:"+username);
System.out.println("password:"+password);
return "success";
}
}
执行了...
username:hehe
password:123
2 请求参数绑定实体类型
package com.domain;
import java.io.Serializable;
public class Account implements Serializable{
private String username;
private String password;
private Double money;
private User user;
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 Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String toString() {
return "Account{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", money=" + money +
", user=" + user +
'}';
}
}
/**
* 请求参数绑定把数据封装到JavaBean的类中
* http://localhost:8080/param.jsp
* @return
*/
@RequestMapping("/saveAccount")
public String saveAccount(Account account){
System.out.println("执行了...");
System.out.println(account);
return "success";
}
<%--把数据封装Account类中--%>
<form action="param/saveAccount" method="get">
姓名:<input type="text" name="username" /><br/>
密码:<input type="text" name="password" /><br/>
金额:<input type="text" name="money" /><br/>
用户姓名:<input type="text" name="user.uname" /><br/>
用户年龄2:<input type="text" name="user.age" /><br/>
<input type="submit" value="提交" />
</form>
Account{username='111', password='222', money=333.0, user=User{uname='444', age=555, date=null}}
3 配置解决中文乱码的过滤器
<!--配置解决中文乱码的过滤器-->
<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>
4 请求参数绑定集合类型
package com.domain;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
public class Account implements Serializable{
private String username;
private String password;
private Double money;
// private User user;
private List<User> list;
private Map<String,User> map;
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 Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
}
public Map<String, User> getMap() {
return map;
}
public void setMap(Map<String, User> map) {
this.map = map;
}
@Override
public String toString() {
return "Account{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", money=" + money +
", list=" + list +
", map=" + map +
'}';
}
}
<form action="param/saveAccount" method="get">
姓名:<input type="text" name="username" /><br/>
密码:<input type="text" name="password" /><br/>
金额:<input type="text" name="money" /><br/>
用户姓名:<input type="text" name="user.uname" /><br/>
用户年龄:<input type="text" name="user.age" /><br/>
用户姓名:<input type="text" name="list[0].uname" /><br/>
用户年龄:<input type="text" name="list[0].age" /><br/>
用户姓名:<input type="text" name="map['one'].uname" /><br/>
用户年龄:<input type="text" name="map['one'].age" /><br/>
<input type="submit" value="提交" />
</form>
Account{username='111', password='222', money=333.0, list=[User{uname='666', age=777, date=null}], map={one=User{uname='888', age=999, date=null}}}
5 自定义类型转换器演示异常
6 自定义类型转换器代码编写
7 获取Servlet原生的API
============================================
03.SpringMVC常用注解
1 RequestParam注解
<a href="anno/testRequestParam?name=hhhhhhhh">RequestParam</a>
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(name="name") String username){
System.out.println("执行了...");
System.out.println(username);
return "success";
}
2 RequestBody注解
<form action="anno/testRequestBody" method="post">
用户姓名:<input type="text" name="username" /><br/>
用户年龄:<input type="text" name="age" /><br/>
<input type="submit" value="提交" />
</form>
/**
* 获取到请求体的内容
* @return
*/
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body){
System.out.println("执行了...");
System.out.println(body);
return "success";
}
username=aaa&age=123
3 PathVariable注解
<a href="anno/testPathVariable/10">testPathVariable</a>
/**
* PathVariable注解
* @return
*/
@RequestMapping("/testPathVariable/{sid}")
public String testPathVariable(@PathVariable(name="sid") String id){
System.out.println("执行了...");
System.out.println(id);
return "success";
}
4 HiddentHttpMethodFilter过滤器
5 RequestHeader注解
6 CookieValue注解
<a href="anno/testCookieValue">CookieValue</a>
/**
* 获取Cookie的值
* @return
*/
@RequestMapping(value="/testCookieValue")
public String testCookieValue(@CookieValue(value="JSESSIONID") String cookieValue){
System.out.println("执行了...");
System.out.println(cookieValue);
return "success";
}
7 ModelAttribute注解
8 SessionAttributes注解
============================================
04.SpringMVC返回值类型及响应数据类型
1 搭建环境
2 响应之返回值是String类型
3 响应之返回值是void类型
4 响应之返回值是ModelAndView类型
5 响应之使用forward和redirect进行页面跳转
6 响应json数据之过滤静态资源
7 响应json数据之发送ajax的请求
8 响应json数据之响应json格式数据
<%--
Created by IntelliJ IDEA.
User: admini
Date: 2020/11/5
Time: 20:05
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script src="js/jquery.min.js"></script>
<script>
// 页面加载,绑定单击事件
$(function(){
$("#btn").click(function(){
// alert("hello btn");
// 发送ajax请求
$.ajax({
// 编写json格式,设置属性和值
url:"user/testAjax",
contentType:"application/json;charset=UTF-8",
data:'{"username":"hehe","password":"123","age":30}',
dataType:"json",
type:"post",
success:function(data){
// data服务器端响应的json的数据,进行解析
alert(data.username + data.password + data.age);
}
});
});
});
</script>
</head>
<body>
<a href="user/testString" >testString</a>
<a href="user/testVoid" >testVoid</a>
<a href="user/testModelAndView" >testModelAndView</a>
<a href="user/testForwardOrRedirect" >testForwardOrRedirect</a>
<button id="btn">发送ajax的请求</button>
</body>
</html>
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2018/5/1
Time: 1:18
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>执行成功</h3>
${user.username}
${user.password}
</body>
</html>
package com.controller;
import com.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller
@RequestMapping("/user")
public class UserController {
/**
* 返回String
* @param model
* @return
*/
@RequestMapping("/testString")
public String testString(Model model){
System.out.println("testString方法执行了...");
// 模拟从数据库中查询出User对象
User user = new User();
user.setUsername("美美");
user.setPassword("123");
user.setAge(30);
// model对象
model.addAttribute("user",user);
return "success";
}
/**
* 是void
* 请求转发一次请求,不用编写项目的名称
*/
@RequestMapping("/testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("testVoid方法执行了...");
// 编写请求转发的程序
// request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
// 重定向
// response.sendRedirect(request.getContextPath()+"/index.jsp");
}
/**
* 返回ModelAndView
* @return
*/
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
// 创建ModelAndView对象
ModelAndView mv = new ModelAndView();
// 模拟从数据库中查询出User对象
User user = new User();
user.setUsername("小凤");
user.setPassword("456");
user.setAge(30);
// 把user对象存储到mv对象中,也会把user对象存入到request对象
mv.addObject("user",user);
// 跳转到哪个页面
mv.setViewName("success");
return mv;
}
/**
* 使用关键字的方式进行转发或者重定向
* @return
*/
@RequestMapping("/testForwardOrRedirect")
public String testForwardOrRedirect(){
System.out.println("testForwardOrRedirect方法执行了...");
// 请求的转发
// return "forward:/WEB-INF/pages/success.jsp";
// 重定向
return "redirect:/index.jsp";
}
/**
* 模拟异步请求响应
*/
@RequestMapping("/testAjax")
public @ResponseBody User testAjax(@RequestBody User user){
System.out.println("testAjax()...");
// 客户端发送ajax的请求,传的是json字符串,后端把json字符串封装到user对象中
System.out.println(user);
// 做响应,模拟查询数据库
user.setUsername("haha");
user.setAge(40);
user.setPassword("456");
// 做响应
return user;
}
}
源码:hellospringmvc22
============================================
05.文件上传
============================================
06.异常处理及拦截器
1 SpringMVC拦截器之介绍和搭建环境
2 SpringMVC异常处理之演示程序异常
3 SpringMVC异常处理之异常处理代码编写
4 SpringMVC异常处理之分析和搭建环境
5 SpringMVC拦截器之编写controller
6 SpringMVC拦截器之拦截器入门代码
7 SpringMVC拦截器之拦截器接口方法演示
============================================