SpringMVC(一)-请求接受方式

1.介绍

1.1 官网查看

官网
4.3.24文档
在这里插入图片描述
SNAPSHOT:快照版,可以稳定使用,且仍在继续改进版本
R,RELEASE:正式版,等价于GA
GA:(Ggeneral Availability):发行稳定版,官方推荐使用此版本。
版本说明参考

环境搭建:SpringMVC环境简单搭建

1.2 大概运行流程

在这里插入图片描述

在这里插入图片描述

2.接收请求处理

2.1 RequestMapping(主要用于URL映射、校验等处理)

@RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一。这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上。
Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求
• 在控制器的类定义及方法定义处都可标注
@RequestMapping
类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目录
– 方法处:提供进一步的细分映射信息。相对于类定义处的 URL。若
类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于WEB 应用的根目录
• DispatcherServlet 截获请求后,就通过控制器上@RequestMapping 提供的映射信息确定请求所对应的处理方法。

2.1.1 请求映射以及校验

一个请求的内容如下:
在这里插入图片描述
在这里插入图片描述
params和header仅供了解,知道这两个参数加上后,访问后台,就更加需要符合这两个里面的条件,才能访问指定的方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

    @RequestMapping(value = "/index", method = RequestMethod.GET,params = {"pid=1","pname"},headers = {"Accept-Language=zh-CN,zh;q=0.9"})
    public String index() {
        logger.info("RequestMapping start");
        return "index";
    }

URL:IP+PORT+项目名+类名注解+方法名注解
即如果有类名+方法名映射,那么类名就相当于web项目名下的根目录,如果没有类名,则方法名就相当于根目录

2.1.2 Ant风格

说白了,就是url支持通配符过滤而已,就是只要满足这个通配符的要求,所有请求都会进入到此方法中,这个也了解
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.3 PathVariable

主要作用就是后台参数绑定Url里的占位符,由于有这种功能,后续为REST风格提供了基础
在这里插入图片描述
在这里插入图片描述

2.1.3 REST风格

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 请求参数处理

Spring MVC 通过分析处理方法的签名,将 HTTP 请求信息绑定到处理方法的相应形参中
对方法及方法入参标注相应的注解(@PathVariable、@RequestParam、@RequestHeader等)、SpringMVC 框架会将 HTTP 请求的信息绑定到相应的方法入参中,并根据方法的返回值类型做出相应的后续处理。

2.2.1 RequestParam

在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法
– value:参数名
– required:是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常
在这里插入图片描述

2.2.2 RequestHeader

请求头包含了若干个属性,服务器可据此获知客户端的信息,通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的入参中
用的比较少
在这里插入图片描述

2.2.3 CookieValue

@CookieValue 可让处理方法入参绑定某个 Cookie 值
就是把cook值放到一个参数里,这个也了解
在这里插入图片描述
在这里插入图片描述

2.2.4 POJO方式传递给方法入参

Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值。支持级联属性。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.5 Servlet 原生 API 获取形参

MVC 的 Handler 方法可以接受哪些 ServletAPI 类型的参数:
• HttpServletRequest
• HttpServletResponse
• HttpSession
• java.security.Principal
• Locale
• InputStream
• OutputStream
• Reader
• Writer

在这里插入图片描述
在这里插入图片描述

2.2.6
2.2.7

2.3 输出模型数据

Spring MVC 提供了以下几种途径输出模型数据:
ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据
Map 及 Model: 入参为
org.springframework.ui.Model、org.springframework.ui.ModelMap 或 java.uti.Map 时,处理方法返回时,Map中的数据会自动添加到模型中。
@SessionAttributes: 将模型中的某个属性暂存到HttpSession 中,以便多个请求之间可以共享这个属性
@ModelAttribute: 方法入参标注该注解后, 入参的对象就会放到数据模型中

2.3,1 ModelAndView

控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型数据信息。
• 添加模型数据:
– MoelAndView addObject(String attributeName, ObjectattributeValue)
– ModelAndView addAllObject(Map<String, ?> modelMap)
• 设置视图:
– void setView(View view)
– void setViewName(String viewName)
pom

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

suc.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h3>Now : ${requestScope.nowTime}</h3>
</body>
</html>
    @RequestMapping(value = "/index")
    public ModelAndView index() {
        String view = "suc";
        ModelAndView mv = new ModelAndView(view);
        mv.addObject("nowTime",new Date());
        return mv;
    }

在这里插入图片描述

2.3.2 入参为Map

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.3 SessionAttributes

• 若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个 @SessionAttributes, Spring MVC将在模型中对应的属性暂存到 HttpSession 中
• @SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中
– @SessionAttributes(types=User.class) 会将隐含模型中所有类型为 User.class 的属性添加到会话中。
– @SessionAttributes(value={“user1”, “user2”})
– @SessionAttributes(types={User.class, Dept.class})
– @SessionAttributes(value={“user1”, “user2”},
types={Dept.class})

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.4 ModelAttribute

在方法定义上使用 @ModelAttribute 注解
Spring MVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法。
在方法的入参前使用 @ModelAttribute 注解
– 可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参
– 将方法入参对象添加到模型中
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.4 Json接收与返回

springmvc接收json数据的4种方式
SpringMVC中controller接收Json数据
SpringMVC接收和响应json数据

• ConversionService 是 Spring 类型转换体系的核心接口。
• 可以利用 ConversionServiceFactoryBean 在 Spring 的 IOC容器中定义一个 ConversionService. Spring 将自动识别出IOC 容器中的 ConversionService,并在 Bean 属性配置及Spring MVC 处理方法入参绑定等场合使用它进行数据的转换
• 可通过 ConversionServiceFactoryBean 的 converters 属性注册自定义的类型转换器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

所以,当我们需要支持json字符串转对象,对象转json字符串的时候,是需要引入相关json包的
pom.xml

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.7.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.7.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.7.0</version>
    </dependency>

在这里插入图片描述
在这里插入图片描述

3.注意

3.1 springmvc默认加载配置文件路径

DispatcherServlet 默认加载 /WEBINF/.xml 的 Spring 配置文件, 启动 WEB 层的 Spring 容器。可以通过 contextConfigLocation 初始化参数自定义配置文件的位置和名称

	<!-- 配置 DispatcherServlet -->
	<servlet>
		<servlet-name>dispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- 配置 DispatcherServlet 的一个初始化参数: 配置 SpringMVC 配置文件的位置和名称 -->
		<!-- 
			实际上也可以不通过 contextConfigLocation 来配置 SpringMVC 的配置文件, 而使用默认的.
			默认的配置文件为: /WEB-INF/<servlet-name>-servlet.xml
		-->
		<!--  
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param>
		-->
		<load-on-startup>1</load-on-startup>
	</servlet>

在这里插入图片描述

3.2 No mapping found for HTTP request with URI

若写成/*就会报这个错误
在这里插入图片描述

3.3 default-servlet-handler

慎用这个,mvc:default-servlet-handler/,不然添加了后,前端页面返回给浏览器,浏览器只会显示整个代码出来

3.4 EL表达式不执行

jsp里一定要写 isELIgnored=“false”,不然EL表达式不会执行

3.5 IDEA springmvc debug日志不显示

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值