SpringMVC初步认识
2021-06-04 09:04
YPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
标签:new 利用反射 jsp 流程 数据 character false input property
SpringMVC概述
SpringMVC通过Spring实现web模块,简化web开发
SpringMVC通过一套MVC注解,让POJO(Plain Ordinary Java Object)成为处理请求的控制器,而无需实现任何接口
支持REST风格的URL请求
原生的MVC
Model:模型,封装和映射数据
View:视图,页面显示工作
Controller:控制器,控制整个网站的跳转逻辑(Servlet)
Spring的MVC
简单使用
运行流程:
客户端点击连接发送 http://localhost:8080/mvctest/hello
来到tomcat服务器
SpringMVC前端控制器收到所有请求
比较请求地址和哪个@RequestMapping标注匹配,决定使用哪个类的哪个方法来处理请求
前端控制器找到目标处理器类和目标方法,直接利用反射执行目标方法
方法执行完成后有一个返回值,用视图解析器拼接得到完整页面地址
拿到页面地址,前端控制器帮我们转发到页面
底层知识:
DefaultServlet是tomcat中处理静态资源(处了jsp和servlet外都是静态资源)的,DefaultServlet的url-pattern=/
如果DispatcherServlet(前端控制器)的url-pattern=/,则将覆盖掉DefaultServlet
jsp能访问是因为没有覆盖服务器中的JspServlet的配置
JspServlet的url-pattern如下
web.xml
dispatcher org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/dispatcher-servlet.xml 1 dispatcher /
dispatcher-servlet.xml
index.jsp
$Title$ hello
success.jsp
成功 访问成功
FirstController.java
package com.tang.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; //@Controller标识表示这是一个控制器,可以处理请求 @Controller public class FirstController { //@RequestMapping告诉SpringMVC这个方法用来处理什么请求,这个/可以省略,默认从当前项目下开始,但习惯加上比较好 @RequestMapping("/hello") public String hello(){ //通过视图解析器帮我们拼接 //拼接后:/WEB-INF/pages/success.jsp return "success"; } }
@RequestMapping
在控制器的类定义及方法定义处都可标注
标注在类定义处相当于为方法路径指定了基本路径
参数
method:限定请求方式(GET、POST等)
method=RequestMethod.POST 表示只接收post请求
params:规定请求参数
params={"username"} 表示发送请求的时候必须带上一个名为username的参数
params={"!username"} 表示发送请求的时候不能带上一个名为username的参数
headers:规定请求头
consumes:规定请求头中的Content-Type,表示只接收哪种内容类型的请求
produces:给响应头中加上Content-Type,告诉浏览器返回的内容类型
支持模糊匹配
Ant风格资源地址支持3种匹配符:
?:匹配文件名中的一个字符
*:匹配文件名中任意字符
**:匹配多层路径
@PathVariable获取路径上的占位符
@RequestMapping("/delete/{id}"} public void delete(@PathVariable("id") Integer id) { UserDao.delete(id); }
REST:目的是以更简洁的URL地址来发送请求,以区分请求方式的方法来表示对同一个资源的增删改查
请求处理
@RequestParam
@RequestHeader
@CookieValue
获取请求参数
默认方式获取请求参数:直接给方法加上一个和请求参数同名的形参来接收,若请求没带参数,则形参值为null
注解方式获取请求参数:@RequestParam
@RequestParam:获取请求参数,使用该注解默认必须带参数(可以更改)
属性
- value:指定要获取的参数的key
- required:布尔值(默认为true),true表示必须传参,false表示可以不传参
- defaultValue:默认值
@RequestParam(value="username", required=false, defaultValue="") String username 等同于 String username = req.getParameter("username");
获取请求头中的信息
属性
- value:指定要获取的请求头的key
- required:布尔值(默认为true),true表示必须存在,false表示可以不存在
- defaultValue:默认值
@RequestHeader("User-Agent") String userAgent
获取Cookie
属性
- value:指定要获取的Cookie的key
- required:布尔值(默认为true),true表示必须存在,false表示可以不存在
- defaultValue:默认值
@CookieValue("JSESSIONID") String jid
POJO
SpringMVC会按请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值,支持级联属性
@RequestMapping("/book") public String addBook(Book book) { System.out.println(book); return "success"; }
原生API
SpringMVC的Handler方法可以接收的原生API:
- HttpServletRequest
- HttpServletResponse
- HttpSession
- java.security.Principal
- Locale
- InputStream
- OutputStream
- Reader
- Writer
CharacterEncodingFilter解决乱码问题
注意:要放在其他Filter之前
CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true CharacterEncodingFilter /*
数据输出
Model
Map
ModelMap
都存放在请求域中
最终都是BindingAwareModelMap在工作
ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据
@SessionAttributes:只能标注在类上,将模型中的某个属性暂存到HttpSession中,以便多个请求之间可以共享这个属性
@ModelAttribute:标注于方法上,这个方法就会比目标方法先运行,于是,可以在目标方法执行前先保存需要的数据,然后在目标方法参数上标注该注解即可取得保存的数据
@RequestMapping("/hello") public ModelAndView hello() { ModelAndView mv = new ModelAndView("success"); mv.addObject("msg", "你好"); return mv; }
DispatcherServlet源码分析
SpringMVC初步认识
标签:new 利用反射 jsp 流程 数据 character false input property
原文地址:https://www.cnblogs.com/tang321/p/14655237.html