81.【SpringMVC】(五)

简介: 81.【SpringMVC】

2.没有视图解析器的转发方式

(1).全限定名进行转发

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:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://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/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!--   开始扫描包下的注解-->
    <context:component-scan base-package="Com.Jsxs.Controller"/>
<!--    设置默认-->
    <mvc:default-servlet-handler/>
<!--    设置驱动器-->
    <mvc:annotation-driven/>
</beans>

控制层

return "/WEB-INF/jsp/hello.jsp";
package Com.Jsxs.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@Controller
public class Controller5 {
    @RequestMapping("/m1/t1")
    public String test(HttpServletRequest request, HttpServletResponse response){
        HttpSession session = request.getSession();
        session.setAttribute("msg","通过Session进行获取");
        return "/WEB-INF/jsp/hello.jsp";
    }
}

必须要使用全限定名

(2).forward进行转发
return "forward:/WEB-INF/jsp/hello.jsp";
package Com.Jsxs.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@Controller
public class Controller5 {
    @RequestMapping("/m1/t1")
    public String test(HttpServletRequest request, HttpServletResponse response){
        HttpSession session = request.getSession();
        session.setAttribute("msg","通过Session进行获取");
        return "forward:/WEB-INF/jsp/hello.jsp";
    }
}

(3).redirect进行重定向(访问不到WEB-INF)
return "redirect:/WEB-INF/jsp/hello.jsp";
package Com.Jsxs.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@Controller
public class Controller5 {
    @RequestMapping("/m1/t1")
    public String test(HttpServletRequest request, HttpServletResponse response){
        HttpSession session = request.getSession();
        session.setAttribute("msg","通过Session进行获取");
        return "redirect:/WEB-INF/jsp/hello.jsp";
    }
}

(4).redirect进行重定向访问(非WEB-INF文件夹)
return "redirect:/a.jsp";
package Com.Jsxs.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@Controller
public class Controller5 {
    @RequestMapping("/m1/t1")
    public String test(HttpServletRequest request, HttpServletResponse response){
        HttpSession session = request.getSession();
        session.setAttribute("msg","通过Session进行获取");
        return "redirect:/a.jsp";
    }
}

(5).转发会走视图解析器,重定向不会走视图解析器

视图解析器配置

<?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:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://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/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!--   开始扫描包下的注解-->
    <context:component-scan base-package="Com.Jsxs.Controller"/>
<!--    设置默认-->
    <mvc:default-servlet-handler/>
<!--    设置驱动器-->
    <mvc:annotation-driven/>
<!--    试图解释器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

Controller

package Com.Jsxs.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@Controller
public class Controller5 {
    @RequestMapping("/m1/t1")
    public String test(HttpServletRequest request, HttpServletResponse response){
        HttpSession session = request.getSession();
        session.setAttribute("msg","通过Session进行获取");
        return "redirect:/a.jsp";
    }
}

重定向: 路径发生了变化

转发: 转发成功后路径没有变化

3.转发和重定向

(1).转发和重定向的含义

WEB-INF 目录是对客户端进行隐藏的,是服务器级别,所以重定向不到,要想访问得到需要写Controller处理

转发:属于内部访问,可以访问WEB-INF下面的文件夹

重定向: 属于外部访问,不可以访问WEB-INF下面的文件夹

(2).转发和重定向的区别
  • 转向URL不会变化,重定向URL会变化。
  • 转发才会走视图解析器,重定向不会走试图解析器

(十)、数据处理(前后端数据交互)

1.前端传递给后端数据【request,respone】

实体类

package Com.Jsxs.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private int id;
    private String name;
    private int sex;
}

控制层

package Com.Jsxs.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@Controller
@RequestMapping("/user")
public class Controller6 {
    @GetMapping("/t1")
    public String test(String name, HttpServletRequest request, HttpServletResponse response){
//        1.接受到前端的数据
        System.out.println("接受到的前端数据为:"+name);
//        2.将结果返回给前端
            HttpSession session = request.getSession();
            session.setAttribute("msg",name);
        return "hello";
    }
}
http://localhost/SpringMVC_06_Controller_war_exploded/user/t1?name=%22%E6%9D%8E%E6%98%8E%22

2.前端给后端传数据【Model】

package Com.Jsxs.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class Controller6 {
    @GetMapping("/t1")
    public String test(String name, Model model){
//        1.接受到前端的数据
        System.out.println("接受到的前端数据为:"+name);
//        2.将结果返回给前端
            model.addAttribute("msg",name);
        return "hello";
    }
}

3.前端给后端传数据【注解】

package Com.Jsxs.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping("/user")
public class Controller6 {
    @GetMapping("/t1")
    public String test(@RequestParam("username") String name, Model model){
//        1.接受到前端的数据
        System.out.println("接受到的前端数据为:"+name);
//        2.将结果返回给前端
            model.addAttribute("msg",name);
        return "hello";
    }
}

只能当使用新起的名字才有效,旧名字没有效

新名字才能传递

相关文章
|
Kubernetes 关系型数据库 MySQL
ChaosBlade常见问题之数据库进行故障注入报错ibdata1文件异常如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
488 1
|
资源调度 前端开发 Shell
[docker] DevContainer高效开发(第二篇):前端开发体验
上面的配置只是最基本的配置,大部分情况我们是需要自定义配置,让容器更符合我们的需求。自定义配置就需要用到 Dockerfile,这个文件是 docker 的配置文件,可以在里面安装软件,配置环境等等。Dockerfile 的语法可以参考 官方文档。然后根据自己的需求编写 Dockerfile# 设置变量,由 .devcontainer.json 中的 args 传入# 指定 node 版本# 设置编码# 设置工作目录# 挂载 volume# 设置 bash 为默认 shell。
482 0
|
11月前
|
运维 测试技术 API
(2)深度对比:Apipost vs Apifox (2)文档功能
本文深入对比Apipost和Apifox的API文档管理功能。两者都能生成精美且详细的API文档,涵盖响应体、请求示例等关键信息。Apipost界面设计高效简洁,文档查看与编辑无需频繁切换页面,整体体验流畅;而Apifox功能全面但稍显复杂。选择工具应根据个人习惯和团队需求决定。后续还将对比两者的更多功能,如Mock数据、性能测试及团队协作等。
|
分布式计算 DataWorks 搜索推荐
聊聊DataWorks这个大数据开发治理平台
聊聊DataWorks这个大数据开发治理平台
343 2
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
317 3
|
XML JavaScript 前端开发
SVG学习
【10月更文挑战第1天】
261 3
|
SQL NoSQL 数据库
开发效率与灵活性:SQL vs NoSQL
【8月更文第24天】随着大数据和实时应用的兴起,数据库技术也在不断发展以适应新的需求。传统的SQL(结构化查询语言)数据库因其成熟的数据管理机制而被广泛使用,而NoSQL(Not Only SQL)数据库则以其灵活性和扩展性赢得了众多开发者的青睐。本文将从开发者的视角出发,探讨这两种数据库类型的优缺点,并通过具体的代码示例来说明它们在实际开发中的应用。
320 1
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android面试必问考点之一,如果你能把下面的一些事件分发图当场画出来肯定加分不少。废话不多说,总结一句:事件分发机制很重要。
473 9
|
存储 Kubernetes Go
Go语言项目组织架构
Go语言项目组织架构
|
SQL 存储 关系型数据库
关系型数据库sqlserver的alter语句
【8月更文挑战第5天】
440 4