Spring框架中的SpringMvc三种方案实现的页面跳转(第十五课)

简介: Spring框架中的SpringMvc三种方案实现的页面跳转(第十五课)

本文章的大纲

页面跳转的三种方式 重定向 请求转发   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层进行解耦,是的我们开发更简洁。

2、与Spring无缝衔接。

3、灵活的数据验证,格式化,数据绑定机制。

SpringMVC的缺点:

1, Spring与MVC 的Servlet API 耦合,难以脱离容器独立运行,

2, 太过于细分,开发效率低

3, 过度追求完美,有过度设计的危险

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注解的方式页面跳转

相关文章
|
4天前
|
安全 Java 数据安全/隐私保护
|
1月前
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
10 0
|
1月前
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
9 0
|
1月前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——DeptDaoImpl.java
ssh(Spring+Spring mvc+hibernate)——DeptDaoImpl.java
12 0
|
1月前
|
网络安全
ssh(Spring+Spring mvc+hibernate)——BaseDaoImpl.java
ssh(Spring+Spring mvc+hibernate)——BaseDaoImpl.java
12 0
|
1月前
|
Shell
sh(Spring+Spring mvc+hibernate)——IEmpDao.java
sh(Spring+Spring mvc+hibernate)——IEmpDao.java
11 0
|
1月前
|
Shell
sh(Spring+Spring mvc+hibernate)——IDeptDao.java
sh(Spring+Spring mvc+hibernate)——IDeptDao.java
13 0
|
1月前
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
42 1
|
1月前
|
前端开发 JavaScript Java
MVC框架:SpringMVC(三)
MVC框架:SpringMVC
30 0
|
1月前
|
JSON 前端开发 JavaScript
MVC框架:SpringMVC(二)
MVC框架:SpringMVC
37 0