本文章的大纲
页面跳转的三种方式 重定向 请求转发 ModelAndView实现页面的跳转 理解这三种跳转方式应用的场景和作用
本文章采用的技术是
配置文件+Maven+SpringMvc
最终目标:是理解页面跳转的三种方式和灵活运用所讲的三种方式.
本文章 是先理论后实战:
1 SpringMvc定义:
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等。
2 SpringMvc的优点和缺点:
SpringMVC的优点:
1、springMVC是使用了MVC设计思想的轻量级web框架,对web层进行解耦,是的我们开发更简洁。
SpringMVC的缺点:
1, Spring与MVC 的Servlet API 耦合,难以脱离容器独立运行,
3 请求转发和重定向的区别:
- 请求转发浏览器地址不会发生变化
- 重定向跳转浏览器地址会发生变化,
- 重定向是两次请求,请求转发是一次请求
- 重定向属于浏览器跳转,请求转发属于服务器内部跳转
- 重定向跳转页面是不能发送数据,
- 请求转发是可以携带数据的
4 总结一
1.请求转发是在服务器完成的,重定向是在浏览器完成的
2.请求转发的速度快,重定向速度慢
3.请求转发的是同一次请求,重定向是二次不同的请求
4.请求转发地址栏没有变化,重定向地址栏有变化
5.转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成的
5 在xml文件中如何对控制器进行注册:
<bean name="页面跳转的地址" class="控制器完整的包名"></bean>
<bean name="/aaa" class="Com.SpringMvc.Controller.OneController"></bean> <bean name="/bbb" class="Com.SpringMvc.Controller.TwoController"></bean> <bean name="/ccc" class="Com.SpringMvc.Controller.ThreeController"></bean>
6 设置 监听控制层 在23设计模式属于观察这模式 这个方式只能监听ModelAndView
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--设置页面跳转的前缀和后缀--> <!--页面跳转的前缀--> <property name="prefix" value="WEB-INF/jsp/"></property> <!--跳转页面ModelAndView --> <!--设置页面跳转的后缀--> <property name="suffix" value=".jsp"></property> </bean>
因为本案例采用的是Maven工具开发所以在pom.xml文件中要导入依赖:官网:https://mvnrepository.com/search?q=Spring
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.23</version> </dependency>
7 Demo1 $$ 请求转发的方式:
public class OneController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest Request, HttpServletResponse Response) throws Exception { System.out.println("恭喜你进入了控制层的Controller"); System.out.println("------------------------------------------"); Request.setAttribute("name","王小三"); Request.setAttribute("age",34); Request.setAttribute("sex","男"); Request.setAttribute("height",167); Request.setAttribute("weight","78"); Request.setAttribute("color","蓝色红色白色"); Request.setAttribute("text1","我是对象一利用请求转发"); Request.setAttribute("text","我是 Request对象内容利用 Request.getRequestDispatcher(\"index.jsp\").forward(Request,Response);"); //请求转发的方式 Request.getRequestDispatcher("WEB-INF/jsp/index.jsp").forward(Request,Response); return null; }
请求转发的运行结果
结果如图
8 Demo2 $$ 重定向的方式的方式:
public class TwoController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest Request, HttpServletResponse Response) throws Exception { System.out.println("欢迎你进入第二个控制器的内容TwoController"); //重定向的内容 //重定向 不能带数据 跳转的地址变为了index.jsp /*浏览器访问不了WEB-INF /jsp/index.jsp*/ Request.getSession().setAttribute("text", "欢迎你进入第二个控制器的内容TwoController"); // Response.sendRedirect("WEB-INF/jsp/index.jsp"); Response.sendRedirect("WEB-INF/jsp/index.jsp"); return null; }
结果二
9 Demo3 $$ ModelAndView 方式:
public class ThreeController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest Request, HttpServletResponse Response) throws Exception { /*SpingMvc独有的创建方式*/ /*ModelAndView 带上数据跳转页面 Model View 模型 数据 */ System.out.println(""); ModelAndView mav= new ModelAndView(); //带上数据 mav.addObject("A属性","第三种ModelAndView欢迎你进入第三个控制器的内容TwoControllerA值"); mav.addObject("B","第三种ModelAndView欢迎你进入第三个控制器的内容TwoControllerB"); mav.addObject("C","第三种ModelAndView欢迎你进入第三个控制器的内容TwoControllerC"); mav.addObject("D","第三种ModelAndView欢迎你进入第三个控制器的内容TwoControllerD"); mav.addObject("name","我是ModelAndView"); mav.addObject("age",34); mav.addObject("sex","男"); mav.addObject("height",167); mav.addObject("weight",67); mav.addObject("color","黄色蓝色白色粉色"); //跳转页面 等价于 HttpServletRequest mav.setViewName("index"); return mav; }
运行结果
最终结论:
请求转发是在服务器完成的,重定向是在浏览器完成的
请求转发的速度快,重定向速度慢
请求转发的是同一次请求,重定向是二次不同的请求
请求转发地址栏没有变化,重定向地址栏有变化
转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成的
ModelAndView跳转页面 等价于 HttpServletRequest
设置 监听控制层 在23设计模式属于观察这模式 这个方式只能监听ModelAndView
下文会讲述SpringMvc注解的方式页面跳转