SpringMVC初步认识

2021-06-04 09:04

阅读:723

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如下
*.jsp
*.jspx

 

web.xml

dispatcherorg.springframework.web.servlet.DispatcherServletcontextConfigLocation/WEB-INF/dispatcher-servlet.xml1dispatcher/

  

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之前

    CharacterEncodingFilterorg.springframework.web.filter.CharacterEncodingFilterencodingUTF-8forceEncodingtrueCharacterEncodingFilter/*

  

数据输出

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


评论


亲,登录后才可以留言!