tomcat 的get方法編碼問題
最近在用eclipse測(cè)試一個(gè)小的web程序的時(shí)候發(fā)現(xiàn)了tomcat的get方法的編碼問題
我做了兩個(gè)頁面,一個(gè)index.jsp,一個(gè)response.jsp,兩個(gè)頁面都用的是utf-8編碼,index.jsp頁面有一個(gè)表單
index.jsp的內(nèi)容如下:
<%@ 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>無標(biāo)題文檔</title>
</head>
<body>
<form name="form1" method="Get" action="response.jsp">
<p>請(qǐng)輸入用戶名:
<input type="text" name="stu">
</p>
<p>
<input type="submit" name="Submit" value="提交">
</p>
</form>
</body>
</html>
response.jsp的內(nèi)容如下:
<%@ 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>無標(biāo)題文檔</title>
</head>
<body>
<%
String name=request.getParameter("stu");
out.println(name);
%>
</body>
</html>
這樣在tomcat上運(yùn)行response.jsp頁面打印出來的內(nèi)容總是亂碼,整了一個(gè)過濾器也沒有作用,后來上網(wǎng)查了一下,發(fā)現(xiàn)是需要在server.xml文件中配置的。
找到server.xml中<Connector
port="8080"
在后面加上URIEncoding="UTF-8"屬性
再次運(yùn)行tomcat,response.jsp頁面的亂碼才改正過來.
這樣設(shè)置的時(shí)候,將index.jsp中的method改為post后,response.jsp中打印出來的仍然是亂碼
要解決這個(gè)亂碼就需要整個(gè)過濾器了,tomcat的servlet例子有一個(gè)過濾器SetCharacterEncodingFilter.java,將其在web.xml注冊(cè)一下,然后再次運(yùn)行的時(shí)候就沒有亂碼了
綜上,在用tomcat開發(fā)的,遇到中文的時(shí)候要注意幾個(gè)方面
1.頁面采用統(tǒng)一的編碼,建議是UTF-8,這個(gè)對(duì)國(guó)際化支持的比較好
2.一般情況,用post方法,然后設(shè)置一個(gè)過濾器,就可以解決亂碼,這個(gè)比較通用,在多數(shù)服務(wù)器都可以運(yùn)行
3.采用get方法的時(shí)候需要設(shè)置server.xml,如果應(yīng)用中g(shù)et,post都有,最好是既要設(shè)置server.xml.又要配置一個(gè)過濾器
4.本人試了resin3.10,jetty6.0,兩個(gè)服務(wù)器,就沒有這個(gè)問題,只要把頁面都設(shè)為utf-8,就可以了
另外隨便說一下,resn3.0.8不支持jdk1.5.0以后的版本,要用jdk1.4
tomcat6.0也沒有解決這個(gè)問題。有必要用用其他的服務(wù)器了.