乐趣区

关于spring:SpringMVC请求与响应的处理实战二

本篇文章讲述响应的解决,对于申请的解决能够看我第一篇文章
链接地址:https://segmentfault.com/a/11…

后期筹备

应用环境

  • JDK:1.8
  • Tomcat:9.0.3
  • Spring:5.2.8
  • Maven:3.6.3
  • 编译器:IntelliJ IDEA 2019

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>mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param> 
            <param-name>contextConfigLocation</param-name>
        <param-value>classpath:ApplicationContext.xml</param-value>
        </init-param> 
    </servlet>
    <servlet-mapping> 
        <servlet-name>mvc</servlet-name>
        <url-pattern>*.do</url-pattern>
     </servlet-mapping>
</web-app>

ApplicationContext.xml 配置(Spring 外围配置文件)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
 https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 开启 spring 注解驱动 -->
     <context:component-scan base-package="com.cjh"/>
    <!-- 开启 mvc 注解驱动 -->
     <mvc:annotation-driven></mvc:annotation-driven>
</beans>

响应解决

原生的 Servlet 解决有间接采纳 response 获取输入流间接响应会给浏览器,通过 request 转发或者重定向三种形式,当初应用 spring-mvc 进行响应的解决

返回 String

  • “forward: 资源路径名 ”:转发到冒号前面的资源门路
  • “redirect: 资源路径名 ”:重定向到冒号前面的资源路径名
  • “”:如果返回的是空串,则会找 index.jsp 资源
  • 示例代码如下:
@Controller
public class UserController {
    
    // 办法中传入实体对象:对象外面有 list 汇合
    @RequestMapping("test.do")
    public String testFive(User user){System.out.println(user);
        return "redirect:welcome.jsp";
    }
}

ModelAndView

  • Model、ModelMap 和 ModelAndView 的区别

    • Model 和 ModelMap 只能存储返回的参数(key-value)
    • ModelAndView 既能存储返回的参数,也能存储资源门路
  • ModelAndView 中有两个重要的属性:

    • Object view:存储资源门路
    • ModelMap model:存储返回的参数,mvc 框架会将存储的 Key-value 数据存入 request 作用域
  • 代码如下:

    • index.jsp:
    <%@ page contentType="text/html; charset=UTF-8" language="java" %>
    <html>
    <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>cai jin hong</title>
    </head>
    <body>
     <form action="test.do" method="post">
         account:<input type="text" name="account" value=""><br>
         password:<input type="text" name="password" value=""><br>
         balance:<input type="text" name="balance" value=""><br>
         address1:<input type="text" name="addressList[0].address" value=""><br>
         address2:<input type="text" name="addressList[1].address" value=""><br>
         <input type="submit" value="submit">
     </form></body>
    </html>
    • welcome.jsp:(这时候,Jsp 就能从 requestScope 作用域外面提取到咱们存进去的 account)
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
     <title>Title</title>
    </head>
    <body>
     param:welcome,${param.account}<br>
     requestScope:welcome,${requestScope.account}<br>
    </body>
    </html>
    • Java:
    @Controller
    public class UserController {
         // 办法中传入实体对象:对象外面有 list 汇合
         @RequestMapping("test.do")
         public ModelAndView testFive(User user){
             // 创立 ModelAndView 对象
             ModelAndView mv = new ModelAndView();
             // 设置返回的参数
             mv.addObject("account", user.getAccount());
             mv.addObject("password", user.getBalance());
             // 设置返回门路
             mv.setViewName("welcome.jsp");
             return mv;
         }
    }

存入 Session 作用域

  • 首先,须要将参数 (Key-value) 存入 request 作用域
  • 而后通过 @SessionAttributes({“key”,””})注解存入 Session 作用域
  • 代码如下:(此时,welcome.jsp 就能从 SessionScope 作用域里获取到 account 的值)
@Controller
@SessionAttributes("account")
public class UserController {
    // 办法中传入实体对象:对象外面有 list 汇合
     @RequestMapping("test.do")
     public ModelAndView testFive(User user){
         // 创立 ModelAndView 对象
         ModelAndView mv = new ModelAndView();
         // 设置返回的参数
         mv.addObject("account", user.getAccount());
         mv.addObject("password", user.getBalance());
         // 设置返回门路
         mv.setViewName("welcome.jsp");
         return mv;
     }
}
退出移动版