SpringMVC(一)-请求接受方式

    xiaoxiao2023-11-24  190

    文章目录

    1.介绍1.1 官网查看1.2 大概运行流程 2.接收请求处理2.1 RequestMapping(主要用于URL映射、校验等处理)2.1.1 请求映射以及校验2.1.2 Ant风格2.1.3 PathVariable2.1.3 REST风格 2.2 请求参数处理2.2.1 RequestParam2.2.2 RequestHeader2.2.3 CookieValue2.2.4 POJO方式传递给方法入参2.2.5 Servlet 原生 API 获取形参2.2.62.2.7 2.3 输出模型数据2.3,1 ModelAndView2.3.2 入参为Map2.3.3 SessionAttributes2.3.4 ModelAttribute 2.4 Json接收与返回 3.注意3.1 springmvc默认加载配置文件路径3.2 No mapping found for HTTP request with URI3.3 default-servlet-handler3.4 EL表达式不执行3.5 IDEA springmvc debug日志不显示

    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日志不显示

    参考

    最新回复(0)