在做一个管理系统的登录界面。为了解决日文无法正常显示的问题,已做了如下处理:数据库统一为UTF-8所有jsp页面前加入如下代码
<%@ page language="java" pageEncoding="UTF-8" %>
<% response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
%>Tomcat编码改成UTF-8
在server.xml里面增加了URIEncoding="UTF-8" 测试一:test.jsp直接连接mysql,读取,插入均正常
<%@ page language="java" pageEncoding="UTF-8" %>
<% response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
%>
<%@ page language="java" %><%@ page import="java.sql.*" %>
<%String driverName="org.gjt.mm.mysql.Driver";
String userName="root";
String userPasswd="";
String dbName="itemmanage";
String tableName="user";String url="jdbc:mysql://localhost/itemmanage?user=root&password=&useUnicode=true&characterEncoding=utf-8";
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
Connection connection=DriverManager.getConnection(url);
Statement statement = connection.createStatement();
String sql="SELECT b.itemID,a.userName,b.borrowDate,b.dueDate FROM user a join borrowrec b ON (a.userID=b.userID AND b.dueDate<='2011-03-24')";
ResultSet rs = statement.executeQuery(sql);
ResultSetMetaData rmeta = rs.getMetaData();
int numColumns=rmeta.getColumnCount();out.print("name");
out.print("|");
out.print("num");
out.print("<br>");
while(rs.next()) {
out.print( rs.getString(2));
out.print("|");
out.print(rs.getString(1));测试二:login_menu.jsp用户登录后界面<%@ page language="java" pageEncoding="UTF-8" %>
<% response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
%>
<%@ page language="java" %><%@ page import="java.sql.*" %>
<html>
<head>
<title>Item Management System : User Info </title>
<META NAME="description" CONTENT="">
<META NAME="keywords" CONTENT="">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head><body><%
// 登録者情報を表示
//管理者の場合
if((login.getUserType()).equals("admin")) {
out.println("管理者として登録成功!<br>");
out.println("名前: " +staff.getUserName() +" ユーザID:" +staff.getUserID() +"<br><br>");
此处username的日文显示正常
String query = "";
String errorMsg="";
ResultSet myResultSet = null;
String queryOrder= "";
//今日の日付を取得
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd");
java.util.Date currentTime = new java.util.Date();
String str_todaydate = formatter.format(currentTime);
// SQL文生成と実行
queryOrder = " ORDER BY itemID ASC ";
query = "SELECT b.itemID,a.userName,b.borrowDate,b.dueDate FROM user a join borrowrec b ON (a.userID=b.userID AND b.dueDate<='" +str_todaydate +"')" + queryOrder;
try {
Connection connection = connectionPool.getConnection();
myResultSet = DatabaseUtilities.getQueryResultSet(connection, query, false);
connectionPool.free(connection);
} catch(Exception e) {
errorMsg = "Error: " + e;
}
//返還予定日は今日以前の設備と借り手を一覧
if (myResultSet != null){
int rowCount = 1 ; // set counter to separate even or odd
try{
out.println ("返還予定日は今日以前の設備と借用者は以下のようです。<br>");
out.println ("<table><tr><th>設備番号</th><th>名前</th><th>貸出日</th><th>返還予定日</th></tr>");
while(myResultSet.next()) {
out.println("<TR><TD>" +myResultSet.getString("itemID"));
out.println("</TD><TD>" +myResultSet.getString("userName"));
此处的username日文显示不正常
out.println("</TD><TD>" +myResultSet.getString("borrowDate"));
out.println("</TD><TD>" +myResultSet.getString("dueDate"));
out.println("</TD></TR>");
rowCount = rowCount+1;
}
out.println (" </table >");
} catch(SQLException sqle) {
System.err.println("Error connecting: " +sqle);
}
}
}login.jsp
<%@ page language="java" pageEncoding="UTF-8" %><% response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
%>
<%@ include file="../common/common.jsp" %>
<% response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cahce");
%>
<html>
<head>
<title>Item Management System : Login</title>
<META NAME="description" CONTENT="">
<META NAME="keywords" CONTENT="">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
<!--
A:link { text-decoration: none; font-weight: bold; color: #660033}
A:active { text-decoration: none; font-weight: bold; color: #660033}
A:visited { text-decoration: none; font-weight: bold; color: #336699}
A:hover { text-decoration: underline; font-weight: bold; color: #FF9999}
.footerLink { font-family: Arial, Helvetica, sans-serif; font-size: 9pt; font-weight: bold; color: #000099}
-->
</style>
</head><body bgcolor="" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onLoad="">
<a name="top"></a> <%
// ログイン状態をチェック、まだログインしていないんら、ログイン画面へ
if (login.isUserLogin()) { %>
<% out.println("貴方は既にログインしましたよ。ユーザID:<b>"); %> <jsp:getProperty name="login" property="userID" />
<% out.println("</b><br>ログアウトして宜しいですか。"); %>
<form name="frmLogout" action="/IM/LogoutProcess" method="post"">
<input type="submit" name="Submit" value="ログアウト">
</form>
<% } else { %>
ユーザーIDとパスワードを入力して下さい。
<form name=login action="/IM/LoginProcess" method="post">
<table width=225 border=0 cellpadding=3>
<tr>
<td colspan=2>
<center>
</center>
</td>
</tr>
<tr>
<td>ユーザーID:</td>
<td>
<input type=text name=loginname>
</td>
</tr>
<tr>
<td>パスワード:</td>
<td>
<input type=password name=password>
</td>
</tr>
<tr>
<td colspan=2 align=center>
<input type=submit value="ログイン" name="Submit">
</td>
</tr>
</table>
</form>
<% } %>
</center>
如果需要看servlet,我会在跟帖补上,在线等解答,请高手不吝赐教啊!
<%@ page language="java" pageEncoding="UTF-8" %>
<% response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
%>Tomcat编码改成UTF-8
在server.xml里面增加了URIEncoding="UTF-8" 测试一:test.jsp直接连接mysql,读取,插入均正常
<%@ page language="java" pageEncoding="UTF-8" %>
<% response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
%>
<%@ page language="java" %><%@ page import="java.sql.*" %>
<%String driverName="org.gjt.mm.mysql.Driver";
String userName="root";
String userPasswd="";
String dbName="itemmanage";
String tableName="user";String url="jdbc:mysql://localhost/itemmanage?user=root&password=&useUnicode=true&characterEncoding=utf-8";
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
Connection connection=DriverManager.getConnection(url);
Statement statement = connection.createStatement();
String sql="SELECT b.itemID,a.userName,b.borrowDate,b.dueDate FROM user a join borrowrec b ON (a.userID=b.userID AND b.dueDate<='2011-03-24')";
ResultSet rs = statement.executeQuery(sql);
ResultSetMetaData rmeta = rs.getMetaData();
int numColumns=rmeta.getColumnCount();out.print("name");
out.print("|");
out.print("num");
out.print("<br>");
while(rs.next()) {
out.print( rs.getString(2));
out.print("|");
out.print(rs.getString(1));测试二:login_menu.jsp用户登录后界面<%@ page language="java" pageEncoding="UTF-8" %>
<% response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
%>
<%@ page language="java" %><%@ page import="java.sql.*" %>
<html>
<head>
<title>Item Management System : User Info </title>
<META NAME="description" CONTENT="">
<META NAME="keywords" CONTENT="">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head><body><%
// 登録者情報を表示
//管理者の場合
if((login.getUserType()).equals("admin")) {
out.println("管理者として登録成功!<br>");
out.println("名前: " +staff.getUserName() +" ユーザID:" +staff.getUserID() +"<br><br>");
此处username的日文显示正常
String query = "";
String errorMsg="";
ResultSet myResultSet = null;
String queryOrder= "";
//今日の日付を取得
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd");
java.util.Date currentTime = new java.util.Date();
String str_todaydate = formatter.format(currentTime);
// SQL文生成と実行
queryOrder = " ORDER BY itemID ASC ";
query = "SELECT b.itemID,a.userName,b.borrowDate,b.dueDate FROM user a join borrowrec b ON (a.userID=b.userID AND b.dueDate<='" +str_todaydate +"')" + queryOrder;
try {
Connection connection = connectionPool.getConnection();
myResultSet = DatabaseUtilities.getQueryResultSet(connection, query, false);
connectionPool.free(connection);
} catch(Exception e) {
errorMsg = "Error: " + e;
}
//返還予定日は今日以前の設備と借り手を一覧
if (myResultSet != null){
int rowCount = 1 ; // set counter to separate even or odd
try{
out.println ("返還予定日は今日以前の設備と借用者は以下のようです。<br>");
out.println ("<table><tr><th>設備番号</th><th>名前</th><th>貸出日</th><th>返還予定日</th></tr>");
while(myResultSet.next()) {
out.println("<TR><TD>" +myResultSet.getString("itemID"));
out.println("</TD><TD>" +myResultSet.getString("userName"));
此处的username日文显示不正常
out.println("</TD><TD>" +myResultSet.getString("borrowDate"));
out.println("</TD><TD>" +myResultSet.getString("dueDate"));
out.println("</TD></TR>");
rowCount = rowCount+1;
}
out.println (" </table >");
} catch(SQLException sqle) {
System.err.println("Error connecting: " +sqle);
}
}
}login.jsp
<%@ page language="java" pageEncoding="UTF-8" %><% response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
%>
<%@ include file="../common/common.jsp" %>
<% response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cahce");
%>
<html>
<head>
<title>Item Management System : Login</title>
<META NAME="description" CONTENT="">
<META NAME="keywords" CONTENT="">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
<!--
A:link { text-decoration: none; font-weight: bold; color: #660033}
A:active { text-decoration: none; font-weight: bold; color: #660033}
A:visited { text-decoration: none; font-weight: bold; color: #336699}
A:hover { text-decoration: underline; font-weight: bold; color: #FF9999}
.footerLink { font-family: Arial, Helvetica, sans-serif; font-size: 9pt; font-weight: bold; color: #000099}
-->
</style>
</head><body bgcolor="" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onLoad="">
<a name="top"></a> <%
// ログイン状態をチェック、まだログインしていないんら、ログイン画面へ
if (login.isUserLogin()) { %>
<% out.println("貴方は既にログインしましたよ。ユーザID:<b>"); %> <jsp:getProperty name="login" property="userID" />
<% out.println("</b><br>ログアウトして宜しいですか。"); %>
<form name="frmLogout" action="/IM/LogoutProcess" method="post"">
<input type="submit" name="Submit" value="ログアウト">
</form>
<% } else { %>
ユーザーIDとパスワードを入力して下さい。
<form name=login action="/IM/LoginProcess" method="post">
<table width=225 border=0 cellpadding=3>
<tr>
<td colspan=2>
<center>
</center>
</td>
</tr>
<tr>
<td>ユーザーID:</td>
<td>
<input type=text name=loginname>
</td>
</tr>
<tr>
<td>パスワード:</td>
<td>
<input type=password name=password>
</td>
</tr>
<tr>
<td colspan=2 align=center>
<input type=submit value="ログイン" name="Submit">
</td>
</tr>
</table>
</form>
<% } %>
</center>
如果需要看servlet,我会在跟帖补上,在线等解答,请高手不吝赐教啊!
<%=new String((myResultSet.getString("userName")).getBytes("ISO-8859-1"), "utf-8")%>
HttpServletResponse response)
throws ServletException, IOException {
loginName=request.getParameter("loginname");
loginPassword = request.getParameter("password");
String errorMsg;
//String table;
try {
query = "SELECT * FROM user where userID = '" +loginName +"' and userPassword = '" +loginPassword +"'";
Connection connection = connectionPool.getConnection();
//DBResults results = DatabaseUtilities.getQueryResults(connection, query, false);
myResultSet = DatabaseUtilities.getQueryResultSet(connection, query, false);
connectionPool.free(connection);
//table = results.toHTMLTable("#FFAD00");
} catch(Exception e) {
errorMsg = "Error: " + e;
}
resetVariable();
if (myResultSet != null){
try{
while(myResultSet.next()) {
userRecNumber = Integer.parseInt(myResultSet.getString("userRecNumber"));
userID = myResultSet.getString("userID");
userPassword = myResultSet.getString("userPassword");
userName = myResultSet.getString("userName");
userType = myResultSet.getString("userType");
userGender = myResultSet.getString("userGender");
/* userEmail = myResultSet.getString("userEmail");
userICNumber = myResultSet.getString("userICNumber");
userAddress1 = myResultSet.getString("userAddress1");
userAddress2 = myResultSet.getString("userAddress2");
userCity = myResultSet.getString("userCity");
userState = myResultSet.getString("userState");
userPostCode = myResultSet.getString("userPostCode");
userCountry = myResultSet.getString("userCountry");
userOccupation = myResultSet.getString("userOccupation");
userContactNumber = myResultSet.getString("userContactNumber");
userTotQuota = Integer.parseInt(myResultSet.getString("userTotQuota"));
userQuotaAvailable = Integer.parseInt(myResultSet.getString("userQuotaAvailable"));
userTotReservation = Integer.parseInt(myResultSet.getString("userTotReservation"));
userReserveAvailable = Integer.parseInt(myResultSet.getString("userReserveAvailable")); */
}
} catch(SQLException sqle) {
System.err.println("Error connecting: " +sqle);
}
}
if (userID != ""){ HttpSession session = request.getSession(true);
Login login = new Login(true, userID, userType);
session.setAttribute("login", login);
if( userType.equals("admin"))
{
User staff = new User(userRecNumber, userID, userPassword, userType, userName, userGender);
session.setAttribute("staff", staff);
} else {
User user = new User(userRecNumber, userID, userPassword, userType, userName, userGender);
session.setAttribute("user", user);
}
1.通过post方法,调用servlet,操作数据库,再返回到页面的日文显示正常;
2.在jsp页面调用servlet,读取和插入日文就不正常。1里面流程如下
login.jsp
<form name=login action="/IM/LoginProcess" method="post">
...
<input type=submit value="ログイン" name="Submit">login_menu.jsp
if((login.getUserType()).equals("admin")) {
out.println("管理者として登録成功!<br>");
out.println("名前: " +staff.getUserName() +" ユーザID:" +staff.getUserID() +"<br><br>");LoginProcess代码如4楼
2在login_menu.jsp中也是同样的
queryOrder = " ORDER BY itemID ASC ";
query = "SELECT b.itemID,a.userName,b.borrowDate,b.dueDate FROM user a join borrowrec b ON (a.userID=b.userID AND b.dueDate<='" +str_todaydate +"')" + queryOrder;
try {
Connection connection = connectionPool.getConnection();
myResultSet = DatabaseUtilities.getQueryResultSet(connection, query, false);
connectionPool.free(connection);
} catch(Exception e) {
errorMsg = "Error: " + e;
}
结果就乱码顶楼的测试一中,不使用servlet,也可以显示正常
2、然后在mysql.ini中配置的MySql的服务器端编码用UTF8,Mysql客户端也用UTF8(可能是这个原因)
3、你现在所有页面都已经用了UTF8格式
4、再注意下request.setCharacterEncoding("utf-8");表示所有接受的参数以UTF8保存就可以了。
String url="jdbc:mysql://localhost/itemmanage?user=root&password=&useUnicode=true&characterEncoding=utf-8";
这个也是关键好像是utf8不是Utf-8,改成
jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF8&mysqlEncoding=utf8&zeroDateTimeBehavior=convertToNull再试试。
这样就都不需要用getBytes进行转译都会直接正常的。