0025SpringMVC的几种响应方式

微笑、不失礼 提交于 2019-12-07 18:43:31

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

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>

 

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


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!