tomcat 的get方法编码问题
最近在用eclipse测试一个小的web程序的时候发现了tomcat的get方法的编码问题
我做了两个页面,一个index.jsp,一个response.jsp,两个页面都用的是utf-8编码,index.jsp页面有一个表单
index.jsp的内容如下:
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<!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>
<form name="form1" method="Get" action="response.jsp">
<p>请输入用户名:
<input type="text" name="stu">
</p>
<p>
<input type="submit" name="Submit" value="提交">
</p>
</form>
</body>
</html>
response.jsp的内容如下:
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<!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>
<%
String name=request.getParameter("stu");
out.println(name);
%>
</body>
</html>
这样在tomcat上运行response.jsp页面打印出来的内容总是乱码,整了一个过滤器也没有作用,后来上网查了一下,发现是需要在server.xml文件中配置的。
找到server.xml中<Connector
port="8080"
在后面加上URIEncoding="UTF-8"属性
再次运行tomcat,response.jsp页面的乱码才改正过来.
这样设置的时候,将index.jsp中的method改为post后,response.jsp中打印出来的仍然是乱码
要解决这个乱码就需要整个过滤器了,tomcat的servlet例子有一个过滤器SetCharacterEncodingFilter.java,将其在web.xml注册一下,然后再次运行的时候就没有乱码了
综上,在用tomcat开发的,遇到中文的时候要注意几个方面
1.页面采用统一的编码,建议是UTF-8,这个对国际化支持的比较好
2.一般情况,用post方法,然后设置一个过滤器,就可以解决乱码,这个比较通用,在多数服务器都可以运行
3.采用get方法的时候需要设置server.xml,如果应用中get,post都有,最好是既要设置server.xml.又要配置一个过滤器
4.本人试了resin3.10,jetty6.0,两个服务器,就没有这个问题,只要把页面都设为utf-8,就可以了
另外随便说一下,resn3.0.8不支持jdk1.5.0以后的版本,要用jdk1.4
tomcat6.0也没有解决这个问题。有必要用用其他的服务器了.