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

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。