zoukankan      html  css  js  c++  java
  • 21SpringMvc_异步发送表单数据到Bean,并响应JSON文本返回(这篇可能是最重要的一篇了)

    这篇文章实现三个功能:1.在jsp页面点击一个按钮,然后跳转到Action,在Action中把Emp(int id ,String salary,Data data)这个实体变成JSON格式返回到页面上。

                                  2.在jsp页面点击第二个按钮,然后跳转到Action,在Action中把List<Emp>这个集合变成JSON格式返回到页面上。

                                  3.在jsp页面点击第三个按钮,然后跳转到Action,

                                               List<Emp> empList = new ArrayList<Emp>();

                                               Map<String,Object> map;

                                                map.put("total",empList.size());
                                                 map.put("rows",empList);

                                                 在Action中把 这个map变成JSON格式返回到页面上。

    案例如下:

          案例结构如下:

                           

    所用的代码文件:com.guigu.shen.Action11(实体类Emp.java;控制器类userAction.java;配置文件springmvc_11.xml);web.xml;bean2json.jsp;

    第一步:先写bean2json.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        <title>My JSP 'index.jsp' starting page</title>
              <script type="text/javascript" src="js/jquery-1.8.2.js"></script>
      </head>
      <body>
    <input type="button" value="Emp转JSON"   /></p>
    <input type="button" value="List<Emp>转JSON"   /></p>
    <input type="button" value="Map<String,Object>"转JSON"/></p>
    
    <!--Emp转JSON -->
    <script type="text/javascript">
    $(":button:first").click(
    function()
    {
    var url="${pageContext.request.contextPath}/emp/bean2json.action";
    var sendData=null;
    //第一个参数是请求的网址,第二个参数是返回的状态,第三个是回调函数
    $.post(url,sendData,function(backData,textStaut,ajax){
    alert(ajax.responseText);
    });
    }
    );
    </script>
    
    
      <!-- Map<String,Object>转JSON  这个非常重要-->      
       <script type="text/javascript">
               $(":button:last").click(function(){
                   var url = "${pageContext.request.contextPath}/emp/map2json.action";
                   var sendData = null;
                $.post(url,sendData,function(backData,textStaut,ajax){
                    alert(ajax.responseText);
                });        
               });
       </script>
    
    
       <!-- List<Emp>转JSON -->      
       <script type="text/javascript">
               $(":button:eq(1)").click(function(){
                   var url = "${pageContext.request.contextPath}/emp/listbean2json.action";
                   var sendData = null;
                $.post(url,sendData,function(backData,textStaut,ajax){
                    alert(ajax.responseText);
                });        
               });
       </script>
      </body>
    </html>

    第二步:写web.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>SpringMvc_10day_self</display-name>
      <!-- Spring提供了一个Filter专门用来解决Post提交中文的乱码问题 -->
       <filter>
         <filter-name>CharacterEncodingFilter</filter-name>
         <filter-class>
     org.springframework.web.filter.CharacterEncodingFilter
     </filter-class>
     <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
     </init-param>
    </filter>
     <filter-mapping>
     <filter-name>CharacterEncodingFilter </filter-name>
     <url-pattern>/*</url-pattern>
     </filter-mapping>
    
     
    
     
     
      <servlet>
      <!--这个名字可以随便取得,但是这个名字取了之后,以后在 WEB-INF下面创建SpirngMVC的配置文件是,命名必须以这个开头,
      
      所以这里取名叫做DispatcherServlet,那么之后的xml文件取名必须为DispatcherServlet-servlet.xml(一个字都不能差)
      
      -->
      <servlet-name>DispatcherServlet</servlet-name>
      <servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <!-- 通知DispatcherServlet去指定目录下找到springmvc.xml配置文件 -->
     <!-- 
     注意这里的  <param-name>contextConfigLocation</param-name>一个字母都不能有错
     一旦有错就会去WEB-INF下面去找
      -->
              <init-param>
                   <param-name>contextConfigLocation</param-name>
                  <param-value>classpath:spring.xml</param-value>
              </init-param>
     </servlet>
     <servlet-mapping>
       <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>*.action</url-pattern>
     
     </servlet-mapping>
    
     
      <welcome-file-list>
       
        <welcome-file>index.jsp</welcome-file>
      
      </welcome-file-list>
    </web-app>

    第三步:写spring.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:aop="http://www.springframework.org/schema/aop"
          xmlns:tx="http://www.springframework.org/schema/tx"
          xmlns:mvc="http://www.springframework.org/schema/mvc"
          xsi:schemaLocation="
          http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-3.0.xsd
          http://www.springframework.org/schema/aop 
          http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
          http://www.springframework.org/schema/tx
          http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
          http://www.springframework.org/schema/mvc
          http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
    >
    <import resource="com/guigu/shen/Action11/springmvc_11.xml"/>
    </beans>

    第四步:springmvc_11.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:aop="http://www.springframework.org/schema/aop"
          xmlns:tx="http://www.springframework.org/schema/tx"
          xmlns:mvc="http://www.springframework.org/schema/mvc"
          xsi:schemaLocation="
          http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-3.0.xsd
          http://www.springframework.org/schema/aop 
          http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
          http://www.springframework.org/schema/tx
          http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
          http://www.springframework.org/schema/mvc
          http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
    >
         <!-- 控制器(程序员)(必须配置) -->
    <context:component-scan base-package="com.guigu.shen.Action11"/>
      <!-- 基于注解的映射器(可选) 
      这个类和以前的xml方式的类不同,专门是注解用的
      -->
               <!--  
               使用JSON的所要做的事情:
                1)导入jackson-core-asl-1.9.11.jar和jackson-mapper-asl-1.9.11.jar
                2)在业务方法的返回值和权限之间使用@ResponseBody注解表示返回值对象需要转成JSON文本
                3)在spring.xml配置文件中编写如下代码:
                <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
                    <property name="messageConverters">
                            <list>
                                <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
                            </list>
                    </property>
                </bean>
            -->
          
           <!-- 注册适配器 -->
            <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
                    <property name="messageConverters">
                            <list>
                                <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
                            </list>
                    </property>
            </bean>
    
    
    </beans>

    第五步:写com.guigu.shen.Action11下面的Emp.java和UserAction.java

    package com.guigu.shen.Action11;
    
    import java.util.Date;
    
    public class Emp {
        private Integer id;
        private String username;
        private Double salary;
        private Date hiredate;
        public Emp(){}
        public Emp(Integer id, String username, Double salary, Date hiredate) {
            this.id = id;
            this.username = username;
            this.salary = salary;
            this.hiredate = hiredate;
        }
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public Double getSalary() {
            return salary;
        }
        public void setSalary(Double salary) {
            this.salary = salary;
        }
        public Date getHiredate() {
            return hiredate;
        }
        public void setHiredate(Date hiredate) {
            this.hiredate = hiredate;
        }
    }
    package com.guigu.shen.Action11;
    
    
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.omg.CORBA.PUBLIC_MEMBER;
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    
    
    
    /**
     * 
     * 
    请求路径可以拆分为:根模块的名字+分模块的名字
    就是相当于当访问http://127.0.0.1:8080:项目名/user/register时就会进入到
    registerMethod方法。
     */
    @Controller
    @RequestMapping(value="/emp")//根模块的请求名字
    public class UserAction {
        
        
        //bean转成json
    @RequestMapping(method=RequestMethod.POST,value="/bean2json")//分模块的请求名字
    /*
     *  @ResponseBody Emp 表示让springmvc将Emp对象转成JSON文本
     * 
     */
    public @ResponseBody Emp EmptoJson()
    {
    Emp emp=new Emp(1, "伤", 111.1, new Date());    
    
     return emp;
    }
    
    
    //list转成Json
    @RequestMapping(method=RequestMethod.POST,value="/listbean2json")//分模块的请求名字
    
    public @ResponseBody List<Emp> listbenatoJson()
    {
        
                List<Emp> empList = new ArrayList<Emp>();
                empList.add(new Emp(1,"伤",7000D,new Date()));
                empList.add(new Emp(2,"伤",8000D,new Date()));
                empList.add(new Emp(3,"伤",9000D,new Date()));
                return empList;
    }
    
    //map转成json
    @RequestMapping(value="/map2json")
    public @ResponseBody Map<String,Object> map2json() throws Exception{
    
        List<Emp> empList = new ArrayList<Emp>();
    
        empList.add(new Emp(1,"伤",7000D,new Date()));
        empList.add(new Emp(2,"伤",8000D,new Date()));
        empList.add(new Emp(3,"伤",9000D,new Date()));
    
        Map<String,Object> map = new LinkedHashMap<String,Object>();
        
        map.put("total",empList.size());
        map.put("rows",empList);
    
        return map;
    }
    
    
    
    
    }

    最后一步测试:

    按钮如下:

    点击“Emp转JSon”效果如下:

     

    点击“List<Emp>转JSON”效果如下:

    点击"Map<Strin,Object>"效果如下:

    Map<Strin,Object>这个是最重要的。

  • 相关阅读:
    用sed删除文件中指定行
    传输文件到docker容器
    RAID技术全解图解-RAID0、RAID1、RAID5、RAID100
    Best PDF Document Viewers for Linux Systems
    nvidia docker install
    cuda apt install
    Ubuntu16_18建立返回桌面、显示桌面的快捷图标的特殊方法
    Linux Shell sort排序常用命令
    linux cut用法
    DispatcherServlet的作用
  • 原文地址:https://www.cnblogs.com/shenxiaoquan/p/5756336.html
Copyright © 2011-2022 走看看