SpringMVC 从入门到精通系列 04 —— 返回值分类和转发和重定向的实现


一、 返回值分类

1.1 返回字符串

  • Controller 方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址。

    @RequestMapping(value="/hello")
    public String sayHello() {
    	System.out.println("Hello SpringMVC!!");
    	// 跳转到 success.js p页面
    	return "success";
    }
    
  • 具体的应用场景

    jsp:

    <a href="user/testString">testString</a>
    

    Controller:

    @Controller
    @RequestMapping(path = "/user")
    public class UserController {
    
        /**
         * 返回字符串
         * @param model
         * @return
         */
        @RequestMapping("/testString")
        public String testString(Model model){
            System.out.println("testString方法执行了");
            //模拟从数据库中查询出user对象
            User user = new User();
            user.setUsername("admin");
            user.setPassword("111");
            user.setAge(13);
            model.addAttribute("user", user);
            return "success";
        }
    }
    

    成功页面:

    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>	
    	<h3>成功页面</h3>	
    	${user.username}
    	${user.password}
    	${user.age}
    </body>
    </html>
    

    测试结果:
    在这里插入图片描述


1.2 返回值是 void

  • 如果控制器的方法返回值编写成 void,执行程序报404的异常(也有可能是空白页面),默认查找JSP页面没有找到。
    原因:默认会跳转到 @RequestMapping(value=“/testVoid”) testVoid的页面。

  • 可以使用请求转发或者重定向跳转到指定的页面

  • 代码如下:

    jsp:

    <a href="user/testVoid">testVoid</a>
    

    Controller:

    @RequestMapping("/testVoid")
    public void testVoid(HttpServletRequest request, HttpServletResponse response)throws Exception{
        System.out.println("testVoid方法执行了");
        
        //跳转到其他页面
        //请求转发
        //request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response);
    
        request.getRequestDispatcher("/index.jsp").forward(request, response);
        //重定向不能访问wen-inf下面的文件
        response.sendRedirect(request.getContextPath()+"/index.jsp");
    
        //设置中文乱码
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");//浏览器解析
        //直接会进行响应
        response.getWriter().print("你好");
        
        return;
    }
    

注意:用转发和重定向用不了视图解析器,因此需要常规处理。


1.3 返回值是 ModelAndView 对象

  • ModelAndView对象是Spring提供的一个对象,可以用来调整具体的JSP视图

  • 具体的代码如下

    jsp:

    <a href="user/testModelAndView">testModelAndView</a>
    

    Controller:

    @RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView(){
        System.out.println("testModelAndView方法执行了");
        //创建 ModelAndView 对象
        ModelAndView mv = new ModelAndView();
        User user = new User();
        user.setUsername("xiuyan");
        user.setPassword("222222");
        user.setAge(13);
    
        //把 user 对象存储到 mv 对象中,也会把 user 对象存入到 request 对象中
        mv.addObject(user);
    
        //跳转
        mv.setViewName("success");
        return mv;
    }
    

    测试结果:
    在这里插入图片描述


二、SpringMVC框架提供的转发和重定向

2.1 forward 请求转发

controller 方法返回 String类型,想进行请求转发也可以编写成:

/**
 * "forward:转发的JSP路径",不走视图解析器了,所以需要编写完整的路径
 */
@RequestMapping("/testForward")
public String testForward(){
	System.out.println("testForwardOrRedirect方法执行了");
	
	//请求转发
	//转发到成功页面
	//return "forward:/WEB-INF/pages/success.jsp";
	//转到其他页面
	//return "forward:/index.jsp";
	//其他请求
	return "forward:/user/testString";
}

2.2 redirect 重定向

@RequestMapping("/testRedirect")
public String testRedirect(){
    System.out.println("testForwardOrRedirect方法执行了");

    //重定向
    //return "redirect:/user/testString";
    return "redirect:/index.jsp";
}

注:重定向访问资源需要加项目的虚拟路径,但 return “redirect:/index.jsp”; 底层帮我们加好项目的虚拟路径了


三、响应 json 数据之过滤静态资源

DispatcherServlet 会拦截到所有的资源,导致一个问题就是静态资源(img、css、js)也会被拦截到,从而不能被使用。解决问题就是需要配置静态资源不进行拦截,在 springmvc.xml 配置文件添加如下配置。

mvc:resources标签配置不过滤
1. location 元素表示 webapp 目录下的包下的所有文件
2. mapping 元素表示以 /static 开头的所有请求路径,如 /static/a 或者/static/a/b

<!--告诉前端控制器,哪些资源不拦截-->
<mvc:resources location="/css/" mapping="/css/**"/> <!-- 样式 -->
<mvc:resources location="/images/" mapping="/images/**"/> <!-- 图片 -->
<mvc:resources location="/js/" mapping="/js/**" /><!--javascript-->

《Spring MVC从入门到精通》是一本非常实用的书籍,它帮助读者系统地学习和掌握Spring MVC框架。 这本书旨在帮助读者逐步了解Spring MVC的基本概念、架构和工作原理。首先,它介绍了Spring MVC框架的发展历程和基本特点,让读者对其背景和优势有了基本的了解。然后,书中详细阐述了Spring MVC的核心组件,如控制器、视图解析器、数据绑定等,通过实例代码和示意图,使读者能够清晰地理解它们的作用和用法。 接着,《Spring MVC从入门到精通》引导读者学习如何配置和使用Spring MVC。它介绍了Spring MVC配置文件的结构和常用标签,详细讲解了如何配置URL映射、视图解析、拦截器等功能。此外,书中还涵盖了处理表单提交、文件上传、异常处理等常见开发需求的实践技巧,以帮助读者在实际项目中应用Spring MVC框架。 除了基本功能之外,这本书还介绍了Spring MVC的高级特性和扩展机制,如RESTful风格的开发、拦截器链、文件下载等,帮助读者进一步优化和扩展自己的应用。此外,书中还专门介绍了Spring MVC与其他技术的集成,如与Spring Boot、Hibernate、MyBatis等的搭配使用,以满足实际项目的需求。 总的来说,《Spring MVC从入门到精通》是一本非常全面、深入的学习指南。通过系统的学习和实践,读者能够从入门到精通掌握Spring MVC框架,提升自己在web开发中的技能水平。无论你是初学者还是有一定经验的开发者,这本书都是值得阅读和研究的良好参考。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xiu Yan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值