本文主要涉及到一下几种响应方式:
1、返回字符串2、返回void3、返回ModelAndView4、转发关键字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" %><html><head> <title>Title</title> <script type="text/javascript" src="js/jquery.min.js"></script> <script> //页面加载,绑定单机事件 $(function(){ $("#btn").click(function () { //测试点击button按钮是否能够正确弹出hello,发现点击无反应 //原因是引入的jquery.min.js资源文件也被前端控制器拦截了, // 需要在springmvc.xml中配置前端控制器不要拦截哪些静态资源文件 //alert("hello"); $.ajax({ //编写json格式,设置属性和值 url:"response/testAjax", //请求类型 contentType:"application/json;charset=UTF-8", //请求数据 data:'{"name":"zhangsan","age":"18"}', //返回类型 dataType:"json", //需要指定post方式,否则含有冒号等特殊字符会报错 type:"post", //成功返回的回调函数,data为返回的数据 success:function (data) { alert(data.name); alert(data.age); } }); }); }); </script></head><body> <a href="response/testString">testString</a><br/> <a href="response/testVoid">testVoid</a><br/> <a href="response/testModelAndView">testModelAndView</a><br/> <a href="response/testForwardOrRedirect">testForwardOrRedirect</a><br/> <button id="btn" >发送ajax请求</button></body></html>
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中配置哪些静态资源不被拦截,如:<mvc:resources mapping="/js/" location="/js/**" /> * 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" %><html><head> <title>Title</title></head><body> <h3>入门成功</h3> <%--如下两行仅用于测试@SessionAttributes注解时使用--%> <%--${ requestScope.get("msg") }<br> ${ sessionScope.get("msg") }--%> <%--返回ModelAndView测试--%> 用户名为:${user.name}<br> 密码为:${user.age}</body></html>
springmvc.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: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 "> <!--开启注解扫描--> <context:component-scan base-package="com.example" /> <!--视图解析器,根据Controller返回的字符串找对应的文件--> <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--文件路径--> <property name="prefix" value="/WEB-INF/pages/" /> <!--文件后缀--> <property name="suffix" value=".jsp" /> </bean> <!--配置自定义类型转换器--> <bean id="conversionServiceFactoryBean" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="com.example.util.StingToDateConvertr" /> </set> </property> </bean> <!--1、开启springmvc框架注解的支持--> <!--2、欲使配置的自定义类型转换器生效,需加上conversion-service属性--> <mvc:annotation-driven conversion-service="conversionServiceFactoryBean"/> <!--jsp页面引入的js文件也会被拦截,配置哪些静态资源文件不要被前端控制器拦截--> <mvc:resources mapping="/js/" location="/js/**" /> <mvc:resources mapping="/css/" location="/css/**" /></beans>
pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>springmvc_day01_01_start</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>springmvc_day01_01_start Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <spring.version>5.0.2.RELEASE</spring.version> </properties> <dependencies> <!--添加spring、springmvc依赖--> <!-- aop --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <!-- aspects --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <!-- beans --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <!-- contexts --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!-- expression --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> <!-- orm --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <!-- jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <!-- test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- tx --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <!-- web --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <!-- webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!--添加spring、springmvc依赖--> <!--用于热部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <!--引入jackson相关的3个核心包--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> <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-annotations</artifactId> <version>2.9.0</version> </dependency> </dependencies> <build> <finalName>springmvc_day01_01_start</finalName> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> </build></project>
若有理解不到之处,望指正!