SpringMVC-响应数据和结果视图

返回值-String

jsp页面代码:

1
<a href="user/testString">返回String</a>

jsp成功页面:

1
2
3
<h3>执行成功!!!!</h3>
${user.uname}
${user.age}

控制器代码:

1
2
3
4
5
6
7
8
9
10
11
12
@RequestMapping(value = "testString")
public String testString(Model model){
System.out.println("testString方法执行了。。。");
// 模拟从数据库查询书User对象
User user = new User();
user.setUname("美美");
user.setAge(18);
user.setDate(new Date());
// model对象
model.addAttribute("user", user);
return "success";
}

结果:

SessionAttributes结果

返回值-void

默认访问地址

默认访问页面 :”/项目名”+”springmvc.xml视图解析器中配置的前缀”+””访问路径”+”springmvc.xml视图解析器中配置的后缀”

如:

​ 项目名称为:springmvc_demo_war_exploded

​ springmvc视图解析器配置:前缀/WEB-INF/pages/ 后缀:.jsp

1
2
3
4
5
<!--视图解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>

​ 请求访问地址:user/testVoid

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

*故默认访问页面为:springmvc_demo_war_exploded/WEB-INF/pages/user/testVoid.jsp *

示例代码:

jsp页面代码:

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

控制器代码:

1
2
3
4
5
6
7
/**
* void
*/
@RequestMapping(value = "testVoid")
public void testVoid(Model model){
System.out.println("testVoid。。。");
}

使用request跳转页面(请求转发)

1
2
3
4
5
6
7
8
9
10
11
/**
* void
* 请求转发一次请求,不用编写项目的名称
*/
@RequestMapping(value = "testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("testVoid。。。");
//编写请求转发程序
request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
return;
}

使用response跳转页面(重定向)

注意:跳转路径需要加项目名称。

1
2
3
4
5
6
7
8
9
10
11
/**
* void
* 重定向
*/
@RequestMapping(value = "testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("testVoid。。。");
//重定向
response.sendRedirect(request.getContextPath()+"/index.jsp");
return;
}

使用response响应输出流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* void
* 直接运行,输出
*/
@RequestMapping(value = "testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("testVoid。。。");
// 设置中文编码,解决中文乱码
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//直接运行响应
response.getWriter().print("你好");
return;
}

返回值-ModelAndView对象

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

控制器代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 返回值-ModelAndView
*/
@RequestMapping(value = "testModelAndView")
public ModelAndView testModelAndView() {
ModelAndView mv = new ModelAndView();
System.out.println("testModelAndView。。。");
// 模拟从数据库查询书User对象
User user = new User();
user.setUname("美美");
user.setAge(18);
user.setDate(new Date());
//把user对象存储到mv对象中,也会把user对象存入request对象
mv.addObject("user",user);
//跳转到哪个页面
mv.setViewName("success");
return mv;
}

使用Forward或Redirect进行页面跳转

方式一:利用requset和response

利用requset和response设置forward和redirect

示例:如上面的返回值void中的示例

请求转发:

1
2
3
4
5
6
7
8
9
10
11
/**
* void
* 请求转发一次请求,不用编写项目的名称
*/
@RequestMapping(value = "testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("testVoid。。。");
//编写请求转发程序
request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
return;
}

重定向:(跳转路径需要加项目名称

1
2
3
4
5
6
7
8
9
10
11
/**
* void
* 重定向
*/
@RequestMapping(value = "testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("testVoid。。。");
//重定向
response.sendRedirect(request.getContextPath()+"/index.jsp");
return;
}

方式二:直接使用关键字forward和redirect

请求转发(forward):

注意:返回值类型为String。

1
2
3
4
5
6
7
8
9
/**
* 使用关键字的方式进行转发或者重定向
*/
@RequestMapping(value = "testForwardOrRedirect")
public String testForwardOrRedirect(){
System.out.println("testForwardOrRedirect方法执行了。。。");
//重定向
return "redirect:/index.jsp";
}

重定向(redirect):

注意:返回值类型为String,跳转路径不需要加项目名称。

1
2
3
4
5
6
7
8
9
/**
* 使用关键字的方式进行转发或者重定向
*/
@RequestMapping(value = "testForwardOrRedirect")
public String testForwardOrRedirect(){
System.out.println("testForwardOrRedirect方法执行了。。。");
//重定向
return "redirect:/index.jsp";
}

过滤静态资源

在SpringMVC配置文件springmvcxml配置前端控制器,设置资源过滤

1
2
<!--前端控制器,哪些静态资源不拦截-->
<mvc:resources mapping="js/" location="js/**"></mvc:resources>

响应json数据

利用ajax

jsp页面代码:(引入的jquery文件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script src="js/jquery-1.8.3.min.js"></script>
<script>
//页面加载,绑定点击事件
$(function(){
$("#btn").click(function () {
// alert("hello btn");
//发送ajax请求
$.ajax({
url:"user/testAjax",
contentType:"application/json;charset=UTF-8",
data:'{"uname":"张三","age":27}',
dataType:"json",
type:"post",
success:function (data) {
//data为服务器端响应额json数据,进行解析
alert("hello btn");
}
});
});
})
</script>
</head>
<body>
<button id="btn">发送ajax请求</button>
</body>
</html>

引入依赖:(将json格式数据封装成Javabean(实体对象))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.2</version>
</dependency>

控制器代码:

1
2
3
4
5
6
7
8
@RequestMapping(value = "testAjax")
public @ResponseBody User testAjax(@RequestBody User user){
System.out.println("testAjax方法执行了。。。");
//客户端发送ajax请求,传的是json字符串,后端把json字符串封装到user对象中
System.out.println(user);
user.setUname("李四");
return user;
}

最后更新: 2020年07月05日 00:30

原始链接: http://ligangit.com/2020/07/01/SpringMVC-响应数据和结果视图/

× 请我吃糖~
打赏二维码