request.setCharacterEncoding("UTF-8")頁面也需要設置轉碼的:
頁面:(.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
response.setContentType("text/html;charset=UTF-8");
處理文件:(.java)
轉碼的三種方法:
A 接受參數時進行編碼轉換
String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8"); 這樣的話,每一個參數都必須這樣進行轉碼。很麻煩。但確實可以拿到漢字。
B 在請求頁面上開始處,執行請求的編碼代碼, request.setCharacterEncoding("UTF-8"),把提交內容的字符集設為UTF-8。這樣的話,接受此參數的頁面就不必在轉碼了。直接使用
String str = request.getParameter("something");即可得到漢字參數。但每頁都需要執行這句話。
這個方法也就對post提交的有效果,對于get提交和上傳文件時的enctype="multipart/form-data"是無效的。稍后下面單獨對這個兩個的亂碼情況再進行說明。
C 為了避免每頁都要寫request.setCharacterEncoding("UTF-8"),建議使用過濾器對所有jsp進行編碼處理。
新手可以暫時不考慮過濾器的方法,過濾器一般都會涉及到配置開發,要修改web.xml,還算是比較麻煩的,建議接觸java一段時間后再考慮使用過濾器的方法。或者如果應用了struts框架,可以查看struts的轉碼過濾器配置。
實際例子:<%request.setCharacterEncoding("UTF-8")%>放在jsp<head></head>之間
jspforward.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>Insert title here</title> <% request.setCharacterEncoding("UTF-8");%> </head> <body> <jsp:forward page="/forwardresult.jsp"> <jsp:param name="name" value="李海"></jsp:param> <jsp:param name="age" value="29"></jsp:param> </jsp:forward> </body> </html>
jspresult.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>Insert title here</title> </head> <body> <%=request.getParameter("name")%> <%=request.getParameter("age")%> </body> </html>
遇到問題:com.mysql.jdbc.Driver class not found 我在項目中的WEB-INF/lib中添加mysql-connector-java-5.6-bin jar包后在eclipse中選中項目刷新,在lib中選中mysql-connector-java-5.6-bin jar右鍵點擊addbulidPath成功解決問題 完整的代碼如下:
<%@page import="java.sql.DriverManager" import="java.sql.Connection" import="java.sql.Statement"
import="java.sql.ResultSet" %>
<%@ 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>Insert title here</title>
</head>
<body>
<%
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");
Statement stmt=conn.createStatement();
String sql="select * from person ";
ResultSet rs=stmt.executeQuery(sql);
%>
<table bgcolor="green" border="1">
<tr>
<td>id</td>
<td>name</td>
<td>sex</td>
<td>age</td>
</tr>
<%
while(rs.next()){
%>
<tr>
<td><%=rs.getString("id") %></td>
<td><%=rs.getString("name") %></td>
<td><%=rs.getString("sex") %></td>
<td><%=rs.getString("age")%></td>
</tr>
<% }%>
</table>
</body>
</html>