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"

...\tomcat\apache-tomcat-6.0.35\conf\server.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方式提交,一定要对传递的参数分别进行编码和解码。

时间: 2024-10-06 00:06:09

JQuery和JSON方式参数传递并处理JAVAWEB中文乱码问题的相关文章

SpringMVC系列(三)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.meth

JQuery以JSON方式提交数据到服务端

JQuery将Ajax数据请求进行了封装,从而使得该操作实现起来容易许多.以往我们要写很多的代码来实现该功能,现在只需要调用$.ajax()方法,并指明请求的方式.地址.数据类型,以及回调方法等.下面的代码演示了如何将客户端表单数据封装成JSON格式,然后通过JQuery的Ajax请求将数据发送到服务端,并最终将数据存储到数据库中.服务端定义为一个.ashx文件,事实上你可以将服务端定义为任何能接收并处理客户端数据的类型,如Web Service,ASP.NET Page,Handler等. 首

jsp get方式请求参数中包含中文乱码问题解决

1. 自己接收到参数之后在后台进行转码处理 2: 修改tomcat的配置文件  server.xml <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8"/> 即可 jsp get方式请求参数中包含中文乱码问题解决,布布扣,bubuk

JavaWeb中文乱码解决方案

1,Jsp页面 <% @page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %> 2,JSP页面头部 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 3,浏览器调用servlet,页面显示乱码 servlet使用response对象输出前

jboss7中配置get方式的编码处理 jBoss7中文乱码

中文乱码一般在代码里面设置编码方式, getResponse().setCharacterEncoding(Constant.CODE_UTF_8); getRequest().setCharacterEncoding(Constant.CODE_UTF_8); 但这只对post有效,对于get则需要在Web容器中配置,Tomcat配置参考:http://blog.csdn.net/calmreason/article/details/44591029 JBoss比较特殊,7之前的版本在某个配置

【转】JQuery以JSON方式提交数据到服务端

JQuery将Ajax数据请求进行了封装,从而使得该操作实现起来容易许多.以往我们要写很多的代码来实现该功能,现在只需要调用$.ajax()方法,并指明请求的方式.地址.数据类型,以及回调方法等.下面的代码演示了如何将客户端表单数据封装成JSON格式,然后通过JQuery的Ajax请求将数据发送到服务端,并最终将数据存储到数据库中.服务端定义为一个.ashx文件,事实上你可以将服务端定义为任何能接收并处理客户端数据的类型,如Web Service,ASP.NET Page,Handler等. 首

如何解析DELPHI XE5服务器返回的JSON数据(翻译)及中文乱码

[plain] view plain copy print? <span style="font-size:14px;">一直想找如何解析JSON数据的说,今天终于找到有人发帖子了.之前有人说用superobject,Tlkjson,delphi json library,delphi  web unit等等.其实我是想找比较简单的解析方式.解析简单的json.下面是转载的坦然的源码. </span> [delphi] view plain copy print

JSP使用JSON传递数据,注意避免中文乱码

JSP传递数据时不方便使用Java中的对象类型,一般使用JSON来传递对象. 在使用JSON时,前端js如下,注意指定dataType: var htmlobj= $.ajax({ url:"chat.do",type:"POST", data:{sayingContent:$("#textarea").val()}, dataType:"json", success: function(data){$("#said

jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法

序列化中文时之所以乱码是因为.serialize()调用了encodeURLComponent方法将数据编码了 解决方法就是进行解码 原因:.serialize()自动调用了encodeURIComponent方法将数据编码了 解决方法:调用decodeURIComponent(XXX,true);将数据解码 //商品标签function tag(url){ var form = $('form').serialize(); //序列化内容 var shuju = decodeURICompon