出现中文问题是jsp文件编码,tomcat默认编码ISO8859_1,以及UTF-8所造成的问题,解决这个问题,需要搞清楚的是服务器端,客户端,以及传递的值的编码问题。
首先jsp编码设置为UTF-8,表单数据经过tomcat,默认ISO8859_1,jsp接收的又是UTF-8,在客户端显示的jsp中文乱码问题就清楚了。
解决方案是:
1.jsp设置UTF-8
2.按字节接收表单数据,转化为UTF-8
3. String username = new String(request.getParameter("username").getBytes("ISO8859_1"), "UTF-8");
String password = new String(request.getParameter("password").getBytes( "ISO8859_1"), "UTF-8");
4.设置UTF-8
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
HelloworldServlet.java
package com.examp;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloWorldServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = new String(request.getParameter("username").getBytes(
"ISO8859_1"), "UTF-8");
String password = new String(request.getParameter("password").getBytes(
"ISO8859_1"), "UTF-8");
System.out.println(username);
System.out.println(password);
response.setContentType("text/html");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println("username is :" + username);
out.println("password is :" + password);
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Login</TITLE>
</HEAD>
<BODY>
<TABLE width="50%" align="center" border=1 cellspacing="0"
cellpadding="0" bordercolordark="#CCCC99" bordercolorlight="#CCCC99">
<TR>
<TD align="center" bgcolor="#CCCC99">登录系统</TD>
</TR>
<TR>
<TD><TABLE align="center" border=1 cellspacing="0"
cellpadding="0" bordercolordark="#CCCC99"
bordercolorlight="#CCCC99">
<FORM ACTION="HelloWorldServlet">
<!--提交FORM后调用helloworld_servlet去处理-->
<TR>
<TD>用户名:</TD>
<TD bgcolor="#CCCC99"><input type="text" name="username"
size=25>
</TD>
</TR>
<TR>
<TD>密码:</TD>
<TD bgcolor="#CCCC99"><input type="password" name="password"
size=25>
</TD>
</TR>
<TR>
<TD align="center" bgcolor="#CCCC99"><input type="submit"
value="提交">
</TD>
<TD align="center" bgcolor="#CCCC99"><input type="reset"
value="重填">
</TD>
</TR>
</FORM>
</TABLE>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>