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"; } }
只能当使用新起的名字才有效,旧名字没有效
新名字才能传递