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

最近又开始把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表单乱码的方法可以参考 这篇文章


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值