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