SpringMVC处理器方法的返回值(5)

这个内容主要讲的是使用SpringMVC下@Controller注解的处理器方法,其中讲解的是其返回的方法。

接下来正片开始!


@Controller注解是springmvc的模式结构之一,springmvc处理controller层下的java文件有其中以下的返回值:

  • ModelAndView
  • String
  • 返回自定义对象
  • 无返回值void

当然,我们要根据控制器中业务逻辑编写的需要来确定选择何种返回值。

接下来通过实际例子来操作处理器的返回。

1、准备工作

1、创建好controller包下的控制器

package com.jpg.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("result")
public class ResultController {
}

2、在jsp文件下面添加result.jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>result</title>
</head>
<body>
    <h1>result------${teamName}</h1>
    <h3>test02---request作用域获取:---${requestScope.team.teamName}--
        -${requestScope.team.teamId}---${requestScope.team.location}</h3>
    <h3>test02---session作用域获取:---${sessionScope.team.teamName}--
        -${sessionScope.team.teamId}---${sessionScope.team.location}</h3>

</body>
</html>

以上就是进行返回值处理的前期准备内容。

2、返回ModelAndView

返回前如果是前后端不分的开发,大部分情况下我们返回的是 ModelAndView,即数据模型+视图的格式。

1、首先添加方法

@RequestMapping("test01")
    public ModelAndView test01(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("teamname","湖人队");
        modelAndView.setViewName("result");
        return modelAndView;
    }

在这里,我们放上来数据,然后在ModelAndView指定视图的名称。

当处理器方法处理完毕后便跳转到其他资源的同时,就需要传递数据,这种情况下选择返回 ModelAndView 比较好。但是如果只是需要传递数据或者跳转之一,这个时候ModelAndView 就不是最优选择。

2、此时进行编译,打开Java Web

在这里插入图片描述

3、返回String类型

上一种方式中的 ModelAndView 可以拆分为两部分,即——Model 和 View。在 SpringMVC 中,Model 我们可以直接在参数中指定,然后返回值是逻辑视图名,视图解析器解析可以将逻辑视图名称转换为物理视图地址。按如下所示:

1、配置自己的视图解析器

 <!--视图解析器-->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

视图解析器通过内部资源视图解析器InternalResourceViewResolver将字符串与解析器中的prefix和 suffix结合形成要跳转的额URI。

2、添加方法

//2、返回字符串
@RequestMapping("test02")
public String test02(HttpServletRequest request){
	Team team=new Team();
	team.setLocation("迈阿密");
	team.setTeamId(1002);
	team.setTeamName("热火");
	//携带数据
	request.setAttribute("team",team);
	request.getSession().setAttribute("team",team);
	//资源的跳转
	return "result";// 经过视图解析器InternalResourceViewResolver的处理,将逻辑视图名称加上前后缀变为物理资源路径 /jsp/result.jsp
}

3、编译运行

在这里插入图片描述

4、返回对象类型

4.1 返回基本对象类型

当处理器方法返回Object对象类型的时候,可以是Integer、String、Map、List,也可以是自定义的对象类型。但是无论是什么类型,都不是作为逻辑视图出现,而是直接作为数据返回然后展示的。一般前端发起Ajax请求的时候都会使用直接返回对象的形式。

这个时候需要做以下的动作:

pom.xml文件中添加两个依赖

<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-core</artifactId>
	<version>2.9.0</version>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.9.0</version>
</dependency>

1、编写测试代码

@ResponseBody
@RequestMapping("test03-1")
public Integer test031(){
	return 666;
}
@ResponseBody
@RequestMapping("test03-2")
public String test032(){
	return "test";
}

4.2 返回自定义对象

1、编写新的方法

@ResponseBody
@RequestMapping("test03-3")
public Team test033(){
	Team team=new Team();
	team.setLocation("迈阿密");
	team.setTeamId(1002);
	team.setTeamName("热火");
	return team;
}

5、无返回值void

方法的返回值为 void,并不一定真的没有返回值,我们可以通过其他方式给前端返回。实际上,这种方式也可以理解为 Servlet 中的的处理方案。


    //通过 HttpServletRequest 做服务端跳转
    @RequestMapping("test04-1")
    public void test041(HttpServletRequest request, HttpServletResponse
            response) throws ServletException, IOException {
        System.out.println("直接使用HttpServletRequest进行服务器端的转发");
        request.getRequestDispatcher("/jsp/ok.jsp").forward(request,response);
    }

    //通过 HttpServletResponse 做重定向
    @RequestMapping("test04-2")
    public void test042(HttpServletRequest request, HttpServletResponse
            response) throws ServletException, IOException {
        System.out.println("直接使用HttpServletResponse重定向跳转");
        response.sendRedirect("/jsp/ok.jsp");
    }

    //通过 HttpServletResponse 给出响应
    @RequestMapping("test04-3")
    public void test043(HttpServletResponse response) throws ServletException,
            IOException {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter writer = response.getWriter();
        writer.write("返回void类型测试---直接返回字符串");
        writer.flush();
        writer.close();
    }

    //也可以自己手动指定响应头去实现重定向:
    @RequestMapping("test04-4")
    public void test044(HttpServletResponse response) throws ServletException,
            IOException {
        response.setStatus(302);//设置响应码,302表示重定向
        response.setHeader("Location","/jsp/ok.jsp");
    }

总结

以上就是我对页面返回的理解,部分可能没有涉及完全希望大家多多批评指正。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Xiao艾扶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值