前言:
小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师。
这个SpringMVC基础学习系列是用来记录我学习SpringMVC框架基础知识的全过程 (这个系列是参照B站狂神的SpringMVC最新教程来写的,由于是之前整理的,但当时没有发布出来,所以有些地方可能有错误,希望大家能够及时指正!)
之后我将尽量以两天一更的速度更新这个系列,还没有学习SpringMVC框架的小伙伴可以参照我的博客学习一下;当然学习过的小伙伴,也可以顺便跟我一起复习一下基础。最后,希望能够和大家一同进步吧,加油吧,编程人!
特别提醒:如果对SpringMVC基础学习系列感兴趣,可以阅读本系列往期博客: 第一篇:SpringMVC基础学习之简单回顾MVC架构和Servlet的使用 第二篇:SpringMVC基础学习之初识SpringMVC 第三篇:SpringMVC基础学习之初识 第四篇:SpringMVC基础学习之使用注解开发 第五篇:SpringMVC基础学习之Controller的两种实现方式和RequstMapping注解的使用 第六篇:SpringMVC基础学习之Restful风格的简单使用
今天我们来到了SpringMVC基础学习的第七站:页面跳转方式的简单使用 。废话不多说,让我们开始今天的学习内容吧。
7.页面跳转方式的简单使用
7.页面跳转方式的简单使用
7.1 了解页面跳转相关对象
7.1.1 什么是ModeldAndView对象?
ModelAndView:即模型和视图,主要用于设置ModelAndView对象,根据view的名称和视图解析器,跳转到指定的页面,其页面格式为:[视图解析器前缀] + viewName + [视图解析器后缀]
7.1.2 ViewResolver对象基础概念
1.什么是ViewResolver对象?
ViewResolver (视图解析器):全称InternalResourceViewResolver (中心资源视图解析器),位于org.springframework.web.servlet.view包下,主要作用是解析ModelAndView (即模型和视图) 对象
2.ViewResolver对象的主要作用
- ViewResovler (视图解析器) 被 DispatcherServlet (前端控制器) 调用,用来解析HandlerAdapter (处理器适配器)传递的逻辑视图名
- ViewResovler (视图解析器) 将解析的逻辑视图名传递给DispatcherServlet (前端控制器)
3.ViewResovler对象的使用
3-1 在配置文件中引入ViewResovler对象
- 在resources文件夹下的springmvc-servlet.xml配置文件中进行相关代码的编写
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
3-2 编写对应的Controller控制器类
package com.kuang.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("msg","Hello,Controller!");
mv.setViewName("user/hello");
return mv;
}
}
7.2 Servlet API的简单使用
7.2.1 Servlet API的使用前提和步骤
1.Servlet API的使用前提
1-1 编写web.xml配置文件
- 在web.xml配置文件中引入dispatcherServlet对象和Servlet映射关系等
<?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>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
1-2 编写spring-servlet.xml配置文件
- 在spring-servlet.xml配置文件中设置自动扫描包,开启注解支持的驱动和引入视图解析器等
<?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
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.kuang.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>
2.Servlet API的使用步骤
通过设置ServletAPI,不需要视图解析器
- 通过HttpServletResponse进行输出
- 通过HttpServletResponse实现重定向
- 通过HttpServletResponse实现转发
7.2.2 ServletAPI的代码实现
1. 通过HttpServletResponse进行输出
package com.kuang.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller
public class HelloController2 {
@RequestMapping("/hello2/h1")
public void hello1(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.getWriter().println("Hello,Spring By Servlet API!");
}
}
2. 通过HttpServletResponse实现重定向
package com.kuang.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller
public class HelloController2 {
@RequestMapping("/hello2/h2")
public void hello2(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.sendRedirect("/index.jsp");
}
}
3. 通过HttpServletResponse实现转发
package com.kuang.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller
public class HelloController2 {
@RequestMapping("/hello2/h3")
public void hello3(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
request.setAttribute("msg","Hello.SpringMVC");
request.getRequestDispatcher("/WEB-INF/jsp/hello.jsp").forward(request,response);
}
}
7.2.3 测试结果
1. 通过HttpServletResponse进行输出
结果:输出成功,显示“Hello,Spring By Servelt API”的信息!
2.通过HttpServletResponse实现重定向
结果:重定向成功,访问到默认的index.jsp页面!
3. 通过HttpServletResponse实现转发
结果:转发请求成功,页面显示”Hello,SpringMVC“的信息!
7.2.4 Servlet的Httpsession对象的使用
1. 编写HelloController3控制类
package com.kuang.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 HelloController3 {
@RequestMapping("/hello3/h1")
public String hello(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
System.out.println(session.getId());
return "hello";
}
}
2. 测试结果
结果:成功访问/hello3/h1页面,并且打印出HttpSession对象的Id信息!
7.3 SpringMVC实现转发和重定向
7.3.1 无视图解析器
通过SpringMVC来实现转发和重定向,无需视图解析器
注意:测试前,要将视图解析器注释掉!
1.修改springmvc-servlet.xml配置文件
- 在配置文件中只设置自动扫描包,注释掉开启注解支持的驱动和引入视图解析器
<?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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.kuang.controller"/>
</beans>
2.编写SpringmvcController控制类
2-1 实现转发方式一
package com.kuang.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class SpringmvcController {
@RequestMapping("/hello4/h1")
public String hello() {
return "/index.jsp";
}
}
2-2 实现转发方式二
package com.kuang.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class SpringmvcController {
@RequestMapping("/hello4/h2")
public String hell2(Model model) {
model.addAttribute("msg","Hello,SpringMVC!");
return "forward:/WEB-INF/jsp/hello.jsp";
}
}
2-3 实现重定向
package com.kuang.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class SpringmvcController {
@RequestMapping("/hello4/h3")
public String hello3() {
return "redirect:/index.jsp";
}
}
3.测试结果
2-1 实现转发方式一
- 在默认URL链接后加上 /hello4/h1,即真实访问地址为:http://localhost:8080/hello4/h1
结果:成功转发到index.jsp页面!
2-2 实现转发方式二
- 在默认URL链接后加上==/hello4/h2==,即真实访问地址为:==http://localhost:8080/hello4/h2 ==
结果:成功转发到hello.jsp页面,并且显示“Hello,SpringMVC!”的信息!
2-3 实现重定向
在默认URL链接后加上==/hello4/h3==,即真实访问地址为:http://localhost:8080/hello4/h3
结果:成功重定向到index.jsp页面!
7.3.2 使用视图解析器
通过SpringMVC来实现转发和重定向,使用视图解析器
注意:重定向不需要视图解析器,可以重定向到另一个请求实现
1.修改springmvc-servlet.xml配置文件
- 在配置文件中只设置自动扫描包,并且开启注解支持的驱动和引入视图解析器等
<?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
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.kuang.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>
2.编写SpringmvcController控制类
2-1 实现转发
package com.kuang.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class SpringmvcController2 {
@RequestMapping("/hello5/h1")
public String hello(Model model) {
model.addAttribute("msg","Hello,Spring");
return "hello";
}
}
2-2 实现重定向
- 重定向不需要视图解析器,本质就是重新请求一个新地方,所以注意路径问题
package com.kuang.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class SpringmvcController2 {
@RequestMapping("/hello5/h2")
public String hello2() {
return "redirect:/index.jsp";
}
}
3.测试结果
2-1 实现转发
- 在默认URL链接后加上 /hello5/h2,即真实访问地址为:http://localhost:8080/hello5/h2
结果:成功转发到hello.jsp页面,并且显示“Hello,Spring”的信息!
2-2 实现重定向
在默认URL链接后加上==/hello5/h2==,即真实访问地址为:http://localhost:8080/hello5/h2
结果:成功重定向到index.jsp页面!
7.3.3 使用总结
- 使用forward转发和redirect重定向都不会走视图解析器,本质就是重新请求一个新位置
- 重定向,不需要视图解析器,可以重定向到另一个请求实现,但要注其路径问题
好了,今天的有关 页面跳转方式的简单使用 的学习就到此结束啦。欢迎小伙伴们积极学习和讨论,喜欢的可以给蜗牛君点个关注,顺便来个一键三连。我们下期见,拜拜啦!
参考视频链接:【狂神说Java】SpringMVC最新教程IDEA版通俗易懂
|