首页 > 代码库 > SpringMVC系列(三)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.method="get";		form.submit();	}</script><body>	<h>添加用户</h>	<form action="">		姓名:<input type="text" name="username"/>		年龄:<input type="text" name="age"/>		<input type="button" value=http://www.mamicode.com/"添加"  onclick="addUser()"> >

 

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=http://www.mamicode.com/"添加"  name="add"> >

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

 

 

SpringMVC系列(三)JQuery和JSON方式参数传递并处理JAVAWEB中文乱码问题