zoukankan      html  css  js  c++  java
  • JQuery和JSON方式参数传递并处理JAVAWEB中文乱码问题

    本文主要讲springMVC中视图和控制器之间常用的两种传递参数的方式:

    1、JQuery

    2、JSON

    一、JQuery方式

    思路:单击按钮后,触发JQuery事件,而提交整个表单

    JSP中

    <script type="text/javascript">
      function addUser(){
        var form=document.form[0];
        form.action="/springMVC/user/data/addUser";
        form.method="get";
        form.submit();
      }
    </script>
    <body>
      <h>添加用户</h>
      <form action="">
        姓名:<input type="text" name="username"/>
        年龄:<input type="text" name="age"/>
        <input type="button" value="添加"  onclick="addUser()"> 
      </form>
    </body>

    Controller中

    JSP和Controller中的参数要一致

    @Controller
    @RequestMapping("/user/data")
    public class DataController {
      //一种:直接获取参数
      @RequestMapping("/addUser")
      public String addUser(String username,String age,HttpServletRequest request){
        request.setAttribute("username",username);
        request.setAttribute("age", age);
        
        return "/userManager";
      }
      //另一种:通过User实体获取参数
      @RequestMapping("/addUser")
      public String addUser(User user,HttpServletRequest request){
        request.setAttribute("username",user.getUsername);
        request.setAttribute("age", user.getAge);
        
        return "/userManager";
      }
    }

    如何解决JAVA WB的中文乱码?

    1、JSP中定义页面的编码方式:UTF-8

    <%@ page language="java" pageEncoding="UTF-8"%>

    2、设置服务器(此处为tomcat)URIEncoding="UTF-8"

    ... omcatapache-tomcat-6.0.35confserver.xml

    <Connector URIEncoding="UTF-8"  port="8080" protocol="HTTP/1.1" 
                   connectionTimeout="20000" 
                   redirectPort="8443" />

    此处只能解决GET提交的乱码问题,而不能解决POST提交!主要是由于传参方式不同

    解决POST的乱码问题,请参见以下方案: 

    3、spring配置文件中用filter过滤

    在初始化的时候设置ForceEncoding为强制编码True

    url-pattern中:设置*.jsp表示对所有jsp页面过滤;设置为*/表示对所有请求过滤

    <filter>  
      <filter-name>encodingFilter</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>  
      <init-param>  
        <param-name>forceEncoding</param-name>  
        <param-value>true</param-value> 
      </init-param>  
    </filter>  
    <filter-mapping>  
      <filter-name>encodingFilter</filter-name>  
      <url-pattern>/*.jsp</url-pattern>  
    </filter-mapping>

    二、JSON方式

    思路:通过控件的ID获取值,然后转化为JSON格式进行传递

    此处容易出现问题:POST提交正常,GET提交乱码

    解决方案:先JQuery中将获取的值用encodeURI分别进行编码,后controller中取出的时候用URLDecoder.decode分别进行解码即可。

    JSP中

    用encodeURI分别进行编码

    <script type="text/javascript">
      $(document).ready(function(){
        $("add").click(function(){
          var userName=encodeURI($("#username").attr("value"));
          var age=encodeURI($("#age").attr("value"));
          
          var user={userName:userName,age:age};
          
          $.ajax({
            url:"/springMVC/user/data/addUser",
            type:"get",
            data:user,
            success:function(data){
              alert("userName->"+data.userName+"age->"+data.age);
            }
          })
        })
      })
    </script>
    <body>
      <h>添加用户</h>
      <form action="">
        姓名:<input type="text" name="username"/>
        年龄:<input type="text" name="age"/>
        <input type="button" value="添加"  name="add"> 
      </form>
    </body>

    Controller中

    用URLDecoder.decode(String)解码

    <p>@Controller
    @RequestMapping("/user/data")
    public class DataController {</p><p> //通过User实体获取参数</p><p> @RequestMapping("/addUserJson")
     public void addUser(User user,HttpServletRequest request,HttpServletResponse response){
          </p><p>    //将参数解码</p><p>    String userName=URLDecoder.decode(user.getUsername,"UTF-8");
          String age=URLDecoder.decode(user.getAge,"UTF-8");
      
          //将获取的参数拼接为JSON格式,后传递到前台显示
          //{"userName":"userName","age":"age"}
          String result="{"userName":" "+user.getUserName()+" ","age":"+user.getAge()+""}";
          PrintWriter out=null;
          response.setContentType("application/json")
             
             try {
              out=response.getWriter();
              out.write(result);
          } catch (IOException e) {
               e.printStackTrace();
           }</p><p> }
    }
    </p>

    总结:

    SpringMVC 页面和控制器之间的传递参数的方式,本文只介绍了最常用的两种方式(JQuery+JSON),重点掌握:JAVA WEB的中文乱码问题。

            首先要设置JSP中的编码方式为UTF-8

                     JQuery方式中,若为GET提交方式乱码,可更改服务器的编码方式;若为POST方式乱码,可配置filter进行过滤

                     JSON方式中,一般用POST提交方式,正常;若采用GET方式提交,一定要对传递的参数分别进行编码和解码。

  • 相关阅读:
    不要抱怨网速慢,只怪你自己不会调快网速
    2014年6月27日 几何和排列 答案
    我的世界杯生活
    javascript设计模式--备忘录模式(Memento)
    翻译:AngularJS应用的认证技术
    javascript设计模式--状态模式(State)
    一张思维导图说明jQuery的AJAX请求机制
    数据库设计中的14个技巧
    密室经典逃脱N部--考验你的智力!据说全球没几人走出去!不要看攻略!【工作之余也来休闲一下】
    关于编程,大学没有传授的10件事
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5091124.html
Copyright © 2011-2022 走看看