回看JSP——解决提交form表单出现的乱码问题

来源:互联网 发布:怎么积累淘宝关注人数 编辑:程序博客网 时间:2024/05/22 11:58

最近又开始把JSP重新拿出来学一遍,有了不少的收货,有些之前没注意到的小细节也发现了解决的方法,比如form表单的乱码问题。乱码问题在写web程序时很常见,也很让人头疼,有时候一个疏忽就会出现乱码,接下来我主要讲一下我学到的解决方法。

(一)使用post请求提交表单出现乱码问题

现在有如下的代码,这段代码会使用post方式 提交相应的内容到request.jsp这个页面。

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>用户注册</title></head><body><h1>用户注册</h1><hr/><form action="request.jsp" method="post">用户名:<input type="text" name="userName" /> <br/>爱好:<input type="checkbox" name="favorite" value="read">阅读<input type="checkbox" name="favorite" value="music">音乐<input type="checkbox" name="favorite" value="dance">跳舞<br/><input type="submit" value="提交"/></form></body></html>
requst.jsp的代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>request内置对象</title></head><body><h1>request内置对象</h1><hr/>用户名:<%=request.getParameter("userName") %><br/>爱好:<%String[] favorites = request.getParameterValues("favorite");if(null != favorites) {for(String favorite : favorites) {out.println(favorite + "  ");}}%><br/></body></html>
对于从reg.jsp提交过来的请求,如果只是使用requst.getParameter(String name)的方式来获取userName的参数值,如果userName的值里面包含中文,那么获取到的值就会出现乱码现象。出现这个问题的原因是提交表单时tomcat服务器(以tomcat为例)默认提交的字符编码是ISO-8859,但是中文的编码为UTF-8,request.jsp收到请求时未给request请求设置字符集,而要解决这个问题,就需要服务器端的最开始处将请求的数据设置为“UTF-8”就行了,输入如下语句:request. setCharacterEncoding(“UTF-8”);这样用户在服务器端获取到的中文数据就不再是乱码了。注意在使用setCharacterEncoding方法设置字符编码时设置的编码要与请求页面的字符编码一致。

(二)通过URL传递参数出现的乱码问题

很多时候会通过URL来传递请求参数,如下对reg.jsp的代码做了修改:
<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>用户注册</title></head><body><h1>用户注册</h1><hr/><form action="request.jsp" method="post">用户名:<input type="text" name="userName" /> <br/>爱好:<input type="checkbox" name="favorite" value="read">阅读<input type="checkbox" name="favorite" value="music">音乐<input type="checkbox" name="favorite" value="dance">跳舞<br/><input type="submit" value="提交"/></form><a href="request.jsp?userName=李四">通过URL方式提交参数</a></body></html>
添加了一个超链接,指向的也是request.jsp,传递了一个userName为李四的参数,这时通过request.getParameter(String name)方式获取参数值时也会出现乱码,而要解决这个乱码可以通过修改服务器的配置来实现,以tomcat服务器为例,修改tomcat 目录-> conf-> server.xml,修改如下内容:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>
添加一个URIEncoding的配置即可。

还有更多的解决form表单乱码的方法可以参考这篇文章。


0 0