Java Study!! - springMVC
type: channel
link: https://www.kaijavademo.top/tag/springMVC/
items: SpringMVC笔记：报文信息转换|拦截器|异常处理器|全注解配置MVC
items: SpringMVC笔记：框架搭建|请求映射注解|获取请求参数注解

SpringMVC笔记：报文信息转换|拦截器|异常处理器|全注解配置MVC
type: item
date: 2023-08-17T16:58:00+00:00
description: springMVC笔记包括报文信息转换器，拦截器源码分析，异常处理器，通过注解配置springMVC代替web.xml和springMVC.xmlHttpMessageConverter报文信息转换器，报文包含有两个方面，请求报文和响应报文。请求报文就是从浏览器发送到服务器，属于request对象，把请求报文转换成java中的一个对象。响应报文是由服务器响应给浏览器的 ，服务器中使用java语言，将java对象转换成响应报文。@RequestBodyRequestEntity@ResponseBody(☆)ResponseEntity@RequestBody在控制器方法中设置形参，并用@RequestBody进行标识，形参所表示的就是当前请求的请求体 //在控制器中处理该请求 @RequestMapping("/testRequestBody") //@RequestBody表示当前的请求参数 public String testRequestBody(@RequestBody String requestBody) throws UnsupportedEncodingException { System.out.println("requestBody : " + URLDecoder.decode(requestBody,"UTF-8")); return "success"; } RequestEntity将所有的浏览器请求信息封装成一个对象，在形参中可以添加，获取请求信息。 @RequestMapping("/testRequestEntity") public String testRequestEntity(RequestEntity<String> requestEntity){ //当前requestEntity表示整个请求报文的信息 System.out.println("获取请求头信息:" + requestEntity.getHeaders()); System.out.println("获取请求体信息:" + requestEntity.getBody()); return "success"; }要想对浏览器进行响应，可以实现一个页面跳转，然后响应浏览器一个完整的页面(转发或重定向)；或者是使用HttpServletResponse中的 response.getWriter().print("); 。回顾原生方法 @RequestMapping("/testResponse") public void testResponse(HttpServletResponse response) throws IOException { /*不需要返回值，不需要返回视图名称实现页面跳转，要么return null 要么设置为void 将print直接作为响应报文的响应体响应到浏览器 响应体是什么我们在浏览器中看到的就是什么 */ response.getWriter().print("hello,response"); }@ResponseBody(☆)在springMVC中实现响应浏览器的功能,为我们提供了一个注解@ResponseBody @RequestMapping("/testResponseBody") @ResponseBody /*@RequestBody用来标识当前的控制器方法，添加注解之后， 返回值不再是视图名称了，而是当前响应的响应体*/ public String testResponseBody(){ return "success"; } 通过注解明显发现比原生API要简单一些。现在我需要响应回去一个对象，而不是一个字符串或文本之类的，就需要使用到JSON，那么就需要导入jackson的依赖pom.xml <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.1</version> </dependency> json有两种格式，一种叫对象，一种叫数组。最外层是大括号就是json对象，如果最外层是[]是json数组。要想实现自动将 [label color="red"]java对象转换为json[/label] ，需要以下步骤：导入jackson的依赖springMVC.xml中开启mvc注解驱动 <mvc:annotation-driven/>处理器方法上添加@ResponseBody标识将java对象直接作为控制器方法返回值返回，就会自动转换为json格式的字符串 [label color="red"]不是…

SpringMVC笔记：框架搭建|请求映射注解|获取请求参数注解
type: item
date: 2023-08-08T09:14:00+00:00
description: 基于SpingMVC的学习笔记，包括框架的基本搭建，请求于请求映射，还有请求参数的注解，以及通过过滤器解决了乱码问题。2023/11/29 更新@RequestParam解释配置web.xml手动创建maven工程的操作在基于SpringMVC手动添加web工程中添加之后我们需要配置SpringMVC的web.xml有关servlet配置可以查看让请求对应类的配置如果使用JDK17+Tomcat8要注意导入mvc为5.3.17(之前我使用5.3.1报错，我在这里找了好久问题，还换了一个模块重写。。) <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.17</version> </dependency>采用默认的配置方式需要放在WEBINF下，位置默认，名称默认，这样不好，学完maven工程应该统一将文件放在resources文件下.web.xml<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!--<servlet>里面<servlet-name>和<servlet-mapping>里面的<servlet-name>保持一致--> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>扩展配置方式对web.xml进行扩展配置<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!--<servlet>里面<servlet-name>和<servlet-mapping>里面的<servlet-name>保持一致--> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--添加<init-param>标签，初始化参数，伴随当前servlet的初始化来初始化的--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springMVC.xml</param-value> </init-param> <!--servlet第一次访问会初始化,初始化中会执行很多内容，都放在第一次访问.会严重影响第一次访问的速度, 添加标签<load-on-startup>将SpringMVC的前端控制器DispatcherServlet初始化时间提前到服务器启动时 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> …