0025SpringMVC的几种响应方式

本文主要涉及到一下几种响应方式:

1、返回字符串
2、返回void
3、返回ModelAndView
4、转发关键字forward和重定向关键字redirect返回字符串
5、ajax调用返回json

具体实现参看代码:

responseTest.jsp

<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2019/12/7
Time: 8:41
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


Title




testString

testVoid

testModelAndView

testForwardOrRedirect



ResponseController.java

package com.example.controller;

import com.example.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Controller
@RequestMapping("/response")
public class ResponseController {
public static final String SUCCESS = "success";
/*1、返回字符串*/
/*2、返回void*/
/*3、返回ModelAndView*/
/*4、转发关键字forward和重定向关键字redirect返回字符串*/
/*5、ajax调用返回json*/
  /*返回字符串和返回ModelAndView会经视图解析器解析,返回void和使用关键字的形式不会经视图解析器解析*/

/*1、返回字符串*/
/*这种方式会经过视图解析器解析,拼接上前缀和后缀*/
@RequestMapping("/testString")
public String testString(Model model){
User user = new User();
user.setName("张三");
user.setAge(18);
model.addAttribute("user",user);
System.out.println("测试返回字符串");
return SUCCESS;
}

/*2、返回void*/
@RequestMapping("testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response){
System.out.println("测试返回void,可利用转发或重定向,或者直接写输出给用户");
//转发,不会经过视图解析器解析,但是由于是服务器内跳转,不用写项目名称,但是需要写转发的完整路径
/*try {
request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}*/
//重定向,由于是客户端重新发送请求,所以需要带项目名,且不能直接访问WEB-INF下的内容
//所以此处以访问webapp下的index.jsp页面为例,地址栏的地址会发生变化
/*try {
response.sendRedirect(request.getContextPath() + "/index.jsp");
} catch (IOException e) {
e.printStackTrace();
}*/
//直接写给客户端,即写出的内容会以新的页面的形式显示
//为了防止中文乱码,需用一下代码设置相关编码
try {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
response.getWriter().print("您好");
} catch (IOException e) {
e.printStackTrace();
}
}
/*3、返回ModelAndView*/
//底层也会把对象存入request作用域中,设置视图名称时可直接写字符串,会调用到视图解析器解析
@RequestMapping("testModelAndView")
public ModelAndView testModelAndView(){
System.out.println("测试返回ModelAndView");
User user = new User();
user.setName("张三");
user.setAge(18);
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject(user);
modelAndView.setViewName(SUCCESS);
return modelAndView;
}
/*4、转发关键字forward和重定向关键字redirect返回字符串*/
//这种方式不会用到视图解析器,需要自己将视图路径写正确
@RequestMapping("testForwardOrRedirect")
public String testForwardOrRedirect(){
System.out.println("测试testForwardOrRedirect");
//测试forward
/*return "forward:/WEB-INF/pages/success.jsp";*/
//测试redirect,此处与调用response.sendRedirect()方法有区别,可不加项目名
return "redirect:/index.jsp";
}
/*5、ajax调用返回json*/
/*a、js文件夹下引入jquery.min.js文件,并在responseTest.jsp中引入该文件
* b、经测试引入的js文件不生效,原因为被前端控制器拦截了,
* 解决办法在springmvc.xml中配置哪些静态资源不被拦截,如:
* c、responseTest。jsp中的方法能正常调用后,将方法改为ajax异步方法
* d、ResponseController中编写请求对应的方法,如果用@RequestBody接收,需要参数类型是字符串,
* 若想用User类型接收json格式的字符串,且方法返回User类型数据,页面以json格式接收,需引入相关jar包*/
@RequestMapping("/testAjax")
public @ResponseBody User testAjax(@RequestBody User user){
System.out.println("测试testAjax");
System.out.println(user);
user.setName("李四");
user.setAge(50);
return user;
}

}

success.jsp

<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2019/12/4
Time: 14:07
To change this template use File | Settings | File Templates.
--%>
<%--为了使el表达式生效,需要在此写上isELIgnored="false"--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>


Title


入门成功


<%--如下两行仅用于测试@SessionAttributes注解时使用--%>
<%--${ requestScope.get("msg") }

${ sessionScope.get("msg") }--%>
<%--返回ModelAndView测试--%>
用户名为:${user.name}

密码为:${user.age}

springmvc.xml


xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:c="http://www.springframework.org/schema/c"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:lang="http://www.springframework.org/schema/lang"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.3.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.3.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd ">



















  





pom.xml



xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0

com.example
springmvc_day01_01_start
1.0-SNAPSHOT
war

springmvc_day01_01_start Maven Webapp

http://www.example.com


UTF-8
1.7
1.7
5.0.2.RELEASE






org.springframework
spring-aop
${spring.version}




org.springframework
spring-aspects
${spring.version}



org.springframework
spring-beans
${spring.version}



org.springframework
spring-context
${spring.version}



org.springframework
spring-core
${spring.version}



org.springframework
spring-expression
${spring.version}



org.springframework
spring-orm
${spring.version}



org.springframework
spring-jdbc
${spring.version}



org.springframework
spring-test
${spring.version}



org.springframework
spring-tx
${spring.version}



org.springframework
spring-web
${spring.version}



org.springframework
spring-webmvc
${spring.version}





org.springframework.boot
spring-boot-devtools



com.fasterxml.jackson.core
jackson-databind
2.9.0


com.fasterxml.jackson.core
jackson-core
2.9.0


com.fasterxml.jackson.core
jackson-annotations
2.9.0






springmvc_day01_01_start



maven-clean-plugin
3.1.0



maven-resources-plugin
3.0.2


maven-compiler-plugin
3.8.0


maven-surefire-plugin
2.22.1


maven-war-plugin
3.2.2


maven-install-plugin
2.5.2


maven-deploy-plugin
2.8.2




 

若有理解不到之处,望指正!



你可能感兴趣的:(0025SpringMVC的几种响应方式)