• springmvc(二)


    请求信息转换

      异步发送表单数据到JavaBean,并响应JSON文本返回

    操作步骤:
    (1)加入Jackson2或fastjson框架包,springmvc默认支持Jackon2,不需要做任何操作,而fastjson需要重新配置HttpMessageConverter。
    (2)使用@RequestBody接收数据和@ResponseBody返回数据,
    这两个动作完全是透明的。

    使用jackson转换json数据

    代码示例:

    创建动态web项目,配置web.xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
      <display-name>Jackson处理json</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      <!-- 定义Springmvc的前端控制器 -->
      <servlet>
              <servlet-name>springmvc</servlet-name>
              <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <!-- 指定解析文件 -->
      <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>/WEB-INF/springmvc-config.xml</param-value>
      </init-param>
      <!-- 指定一开始就加载 -->
      <load-on-startup>1</load-on-startup>
      </servlet>
      
      <!-- 让spring mvc 的前端控制器拦截所有的请求 -->
      <servlet-mapping>
              <servlet-name>springmvc</servlet-name>
              <url-pattern>*.jspx</url-pattern>
      </servlet-mapping>
    </web-app>

    配置springmvc-config.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:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-4.2.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">
           
         <!-- 自动扫描该包,SpringMVC会将包下用了@controller注解的类注册为Spring的controller -->
        <context:component-scan base-package="org.fkjava.action"/>
        
        <mvc:annotation-driven/>
        
        <!-- 视图解析器  -->
         <bean id="viewResolver"
              class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
            <!-- 前缀 -->
            <property name="prefix">
                <value>/WEB-INF/jsp/</value>
            </property>
            <!-- 后缀 -->
            <property name="suffix">
                <value>.jsp</value>
            </property>
        </bean>
    </beans>

    index.jsp页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>登录页面</title>
    </head>
    <body>
    
    <a href="test1.jspx">测试RequestBody</a>
    <br><br>
    <a href="test2.jspx">测试ResponseBody</a>
    <br><br>
    <a href="test3.jspx">集合数据做成json返回</a>
    
    </body>
    </html>

    TestAction.java类

    package org.fkjava.action;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import javax.servlet.http.HttpServletResponse;
    import org.codehaus.jackson.JsonGenerationException;
    import org.codehaus.jackson.map.JsonMappingException;
    import org.codehaus.jackson.map.ObjectMapper;
    import org.fkjava.domain.Book;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller//声明该类为控制器
    public class TestJson {
    
        @RequestMapping("/test1.jspx")//映射index.jspx的请求
        public String test1(){
        //返回/WEB-INF/jsp/test1.jsp页面,这里在springmvc-config.xml配置了前缀和后缀
            return "test1";
        }
        
        @RequestMapping("/test2.jspx")
        public String test2(){
            return "test2";
        }
        
        @RequestMapping("/json/testRequestBody.jspx")//映射对应的请求路径
        public void testRequestBody(
                @RequestBody Book book,
                HttpServletResponse response) throws Exception{
            //用@RequestBody接收数据,得到Book对象
            //向book里添加数据
            book.setAuthor("张山");
            //Jackson开源类包操作json的类
            ObjectMapper mapper = new ObjectMapper();
            //将对象转成json字符串
            String json = mapper.writeValueAsString(book);
            //设置字符编码,输出到json客户端
            response.setContentType("text/html;charset=UTF-8");
            response.getWriter().print(json);
        }
        
        /**(重点)
         * @ResponseBody会将集合数据转换json格式返回客户端
         * @return
         */
        @ResponseBody   //使用@RequestBody接收数据和@ResponseBody返回数据
        @RequestMapping("/json/testResponseBody.jspx")
        public Object testResponseBody(
                @RequestBody Book book){
            book.setAuthor("李四");
            return book;    
        }
        
        @ResponseBody
        @RequestMapping("/json/testArray.jspx")
        public Object testArray(){
            //模拟数据库查询返回多个book对象
            List<Book> books = new ArrayList<>();
            books.add(new Book(1,"轻量级Java","李刚"));
            books.add(new Book(2,"疯狂讲义","李刚"));
            books.add(new Book(3,"Spring","肖"));
            return books;
        }
        
    }

    test1.jsp页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>测试接收JSON格式的数据</title>
    <script type="text/javascript"  src="js/jquery-1.11.0.min.js"></script>
    <script type="text/javascript" src="js/json2.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){//页面一加载就会加载testRequestBody()方法
        testRequestBody();
    });
    
    function testRequestBody(){
        $.ajax("${pageContext.request.contextPath}/json/testRequestBody.jspx",//发送请求
                {
                 dataType : "json",//预期服务器返回的数据类型
                 type : "post",//请求方式
                 contentType : "application/json", //发送信息至服务器时的内容编码类型
                 //发送到服务器的数据
                 data:JSON.stringify({id : 1, name : "Spring MVC企业应用实战"}),
                 async : true ,//默认设置下,所有请求均为异步请求,如果设置为false,则发送同步请求
                 //请求成功后回调函数
                 success : function(data){
                     $("#id").html(data.id);
                     $("#name").html(data.name);
                     $("#author").html(data.author);
                 },
                 //请求出错时调用函数
                 error : function(){
                     alert("数据发送失败");
                 }
            });
    }
    </script>
    </head>
    <body>
    编号:<span id="id"></span><br>
    书名:<span id="name"></span><br>
    作者:<span id="author"></span><br></br>
    </body>
    </html>

    test2.jsp页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>测试接收JSON格式的数据</title>
    <script type="text/javascript"  src="js/jquery-1.11.0.min.js"></script>
    <script type="text/javascript" src="js/json2.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){//页面一加载就会加载testRequestBody()方法
        testRequestBody();
    });
    
    function testRequestBody(){
        $.ajax("${pageContext.request.contextPath}/json/testResponseBody.jspx",//发送请求
                {
                 dataType : "json",//预期服务器返回的数据类型
                 type : "post",//请求方式
                 contentType : "application/json", //发送信息至服务器时的内容编码类型
                 async : true ,//默认设置下,所有请求均为异步请求,如果设置为false,则发送同步请求
                 //请求成功后回调函数
                 success : function(data){
                     $("#id").html(data.id);
                     $("#name").html(data.name);
                     $("#author").html(data.author);
                 },
                 //请求出错时调用函数
                 error : function(){
                     alert("数据发送失败");
                 }
            });
    }
    </script>
    </head>
    <body>
    编号:<span id="id"></span><br>
    书名:<span id="name"></span><br>
    作者:<span id="author"></span><br></br>
    </body>
    </html>

    test3.jsp页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>测试接收JSON格式的数据</title>
    <script type="text/javascript"  src="js/jquery-1.11.0.min.js"></script>
    <script type="text/javascript" src="js/json2.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){//页面一加载就会加载testRequestBody()方法
        testRequestBody();
    });
    
    function testRequestBody(){
        $.ajax("${pageContext.request.contextPath}/json/testArray.jspx",//发送请求
                {
                 dataType : "json",//预期服务器返回的数据类型
                 type : "post",//请求方式
                 contentType : "application/json", //发送信息至服务器时的内容编码类型
                 //发送到服务器的数据
                 data:JSON.stringify({id : 1, name : "Spring MVC企业应用实战"}),
                 async : true ,//默认设置下,所有请求均为异步请求,如果设置为false,则发送同步请求
                 //请求成功后回调函数
                 success : function(data){
                     $.each(data,function(){
                         var tr = $("<tr align='center'/>");
                         $("<td/>").html(this.id).appendTo(tr);
                         $("<td/>").html(this.name).appendTo(tr);
                         $("<td/>").html(this.author).appendTo(tr);
                         $("#booktable").append(tr);
                     })
                 },
                 //请求出错时调用函数
                 error : function(){
                     alert("数据发送失败");
                 }
            });
    }
    </script>
    </head>
    <body>
    <table id="booktable" border="1"  style="border-collapse: collapse;">
        <tr align="center">
          <th>编号</th>
          <th>书名</th>
          <th>作者</th>
        </tr>    
    </table>
    </body>
    </html>

    domain

    package org.fkjava.domain;
    
    public class Book {
        
        private Integer id;
        private String name;
        private String author;
        public Book() {
            super();
            // TODO Auto-generated constructor stub
        }
        public Book(Integer id, String name, String author) {
            super();
            this.id = id;
            this.name = name;
            this.author = author;
        }
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAuthor() {
            return author;
        }
        public void setAuthor(String author) {
            this.author = author;
        }
        @Override
        public String toString() {
            return "Book [id=" + id + ", name=" + name + ", author=" + author + "]";
        }
        
    }

    使用fastJson转换json数据

    1、导包

    2、配置web.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
      <display-name>fastjson操作json</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
      <!-- 定义springmvc的前端控制器 -->
      <servlet>
              <servlet-name>springmvc</servlet-name>
              <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <!-- 指定解析配置文件 -->
      <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>/WEB-INF/springmvc-config.xml</param-value>
      </init-param>
              <!-- 设置一开始就加载 -->
              <load-on-startup>1</load-on-startup>
      </servlet>
      
      <servlet-mapping>
              <servlet-name>springmvc</servlet-name>
              <url-pattern>*.jspx</url-pattern>
      </servlet-mapping>
     
    </web-app>

    2、配置springmvc-config.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:mvc="http://www.springframework.org/schema/mvc"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd     
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-4.2.xsd">
            
        <!-- spring可以自动去扫描base-pack下面的包或者子包下面的java文件,
            如果扫描到有Spring的相关注解的类,则把这些类注册为Spring的bean -->
        <context:component-scan base-package="org.fkjava.action"/>
        
        <mvc:annotation-driven>
            <!-- 设置不使用默认的消息转换器 -->
            <mvc:message-converters register-defaults="false">
                <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
                <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"/>
                <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
                <bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter"/>
                <!-- 配置fastjson中实现HttpMessageConverter接口的转换器 
                FastJsonHttpMessageConverter是fastjson中实现了HttpMessageConverter接口的类-->
                <bean id="fastJsonHttpMessageConverter" 
                    class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                    <!-- 加入支持的媒体类型:返回contentType -->
                    <property name="supportedMediaTypes">
                        <list>
                            <!-- 这里顺序不能反,一定先写text/html,不然ie下会出现下载提示 -->
                            <value>text/html;charset=UTF-8</value>
                            <value>application/json;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
            </mvc:message-converters>
        </mvc:annotation-driven>
        
        <mvc:default-servlet-handler/>
        
        <!-- 视图解析器  -->
         <bean id="viewResolver"
              class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
            <!-- 前缀 -->
            <property name="prefix">
                <value>/WEB-INF/jsp/</value>
            </property>
            <!-- 后缀 -->
            <property name="suffix">
                <value>.jsp</value>
            </property>
        </bean>
        
    </beans>

    index.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>登录页面</title>
    </head>
    <body>
    
    <a href="test1.jspx">测试RequestBody</a>
    <br><br>
    <a href="test2.jspx">测试ResponseBody</a>
    <br><br>
    <a href="test3.jspx">集合数据做成json返回</a>
    
    </body>
    </html>

    TestJson.java类

    @Controller
    public class TestJson {
        
        @RequestMapping("/test1.jspx")
        public String test1(){
            return "test1";
        }
        
        @RequestMapping("/test2.jspx")
        public String test2(){
            return "test2";
        }
        
        @RequestMapping("/test3.jspx")
        public String test3(){
            return "test3";
        }
        
        @RequestMapping(value="/json/testRequestBody.jspx")
        public void setJson(@RequestBody Book book,
                HttpServletResponse response) throws Exception{
            book.setAuthor("肖老师");
            response.setContentType("text/html;charset=UTF-8");
            response.getWriter().print(JSONObject.toJSONString(book));
        }
        
        //@esponseBody会将数据转换json格式返回客户端
        @ResponseBody
        @RequestMapping("/json/testResponseBody.jspx")
        public Object setJson2(
                @RequestBody Book book,
                HttpServletResponse response) throws Exception{
            book.setAuthor("张");
            return book;
        }
        
        // @ResponseBody会将数据转换json格式返回客户端
                @ResponseBody
                @RequestMapping(value="/json/testArray.jspx")
                public Object testArray() throws Exception {
                    List<Book> list = new ArrayList<Book>();
                    list.add(new Book(1,"Spring MVC企业应用实战","肖文吉"));
                    list.add(new Book(2,"轻量级JavaEE企业应用实战","李刚"));
                    return list;
                }
    }

    test1.jsp页面和test2.jsp,和test3.jsp页面以及domain同上

  • 相关阅读:
    联想控件类
    js中如何把字符串转化为对象
    js 字符串转换成数字的三种方法
    js获取页面及个元素高度、宽度
    AppCanCSS背景图片的属性
    .net中Web.config文件的基本原理及相关设置
    粗俗易懂的SQL存储过程在.NET中的实例运用
    关于.NET中的验证码
    sql server语句
    ASP.Net页面间传值
  • 原文地址:https://www.cnblogs.com/guzhou-ing/p/6487117.html
Copyright © 2020-2023  润新知