Servlet 中文编码问题
Servlet 中涉及到两大中文编码问题:
- 获取中文的参数
- 返回中文的响应
获取中文的参数
为了成功获取中文参数,需要做如下操作
-
login.html中加上<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> -
login.html中的form的method修改为post -
在
servlet进行解码和编码byte[] bytes= username.getBytes("ISO-8859-1"); username = new String(bytes,"UTF-8");先根据
ISO-8859-1解码,然后用UTF-8编码,这样就可以得到正确的中文参数。这样需要对每一个提交的数据都进行编码和解码处理,也可以使用一句话代替:request.setCharacterEncoding("UTF-8"); // 放在 request.getParameter() 之前
以上是使用 UTF-8 的方式获取中文。也可以使用 GBK。
<!DOCTYPE html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<form action="login" method="post">
账号 : <input type="text" name="username"> <br>
密码: <inpu type="password" name="password"> <br>
<input type="submit" value="登录">
</form>
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
@override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("username");
// byte[] bytes = name.getBytes("ISO-8859-1");
// name = new String(bytes, "UTF-8");
String password = request.getParameter("password");
System.out.println("username:" + username);
}
}
返回中文的响应
在 LoginServlet 中,加上 response.setContentType("text/html; charset=UTF-8");
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 LoginServlet extends HttpServlet {
@override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("username");
String password = request.getParameter("password");
String html = null;
if ("admin".equals(username) && "admin".equals(password)) {
html = "<div style='color:green'>登录成功</div>";
} else {
html = "<div style='color:red'>登录失败</div>";
}
response.setContentType("text/html; charset=UTF-8");
PrintWriter pw = response.getWriter();
pw.println(html);
}
}
本文详细介绍了在Servlet中处理中文编码问题的方法,包括如何正确获取中文参数和返回中文响应,确保网页显示正常。
235

被折叠的 条评论
为什么被折叠?



