乱码问题
案例演示:
工程案例目录结构
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.study</groupId>
<artifactId>Servlet02</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>javaee</groupId>
<artifactId>javaee-api</artifactId>
<version>5</version>
</dependency>
</dependencies>
</project>
register.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>注册</title>
</head>
<body>
<!--
绝对路径:
/Servlet02/register
相对路径:
当前:/Servlet02/register.html
目标:/Servlet02/register
-->
<form action="register" method="post">
<p>
账户:<input type="text" name="code"/>
</p>
<p>
密码:<input type="password" name="pwd" />
</p>
<p>
性别:
<input type="radio" name="sex" value="M"/>男
<input type="radio" name="sex" value="F"/>女
</p>
<p>
兴趣:
<input type="checkbox" name="interest" value="basketball"/>篮球
<input type="checkbox" name="interest" value="football"/>足球
<input type="checkbox" name="interest" value="tableball"/>桌球
</p>
<p>
<input type="submit" value="注册"/>
</p>
</form>
</body>
</html>
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>Servlet02</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>register</servlet-name>
<servlet-class>web.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>register</servlet-name>
<url-pattern>/register</url-pattern>
</servlet-mapping>
</web-app>
RegisterServlet.java
package web;
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 RegisterServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req,
HttpServletResponse res) throws ServletException, IOException {
//req.setCharacterEncoding("utf-8");
//通过request获取请求数据
//getParameter(name) -> String
//getParameterValues(name) -> String[]
String code = req.getParameter("code");
String pwd = req.getParameter("pwd");
String sex = req.getParameter("sex");
String[] interests = req.getParameterValues("interest");
//处理乱码
code =new String(code.getBytes("iso8859-1"),"utf-8");
System.out.println(code);
System.out.println(pwd);
System.out.println(sex);
if(interests !=null){
for(String interest : interests){
System.out.println(interest);
}
}
res.setContentType("text/html;charset=utf-8");
PrintWriter pw = res.getWriter();
pw.println("<h1>注册成功.</h>");
pw.close();
}
}
将Servlet02工程部署到Tomcat上,运行Tomcat启动案例工程,
浏览器录入http://localhost:8080/Servlet02/register.html即可:如果没有错误,最终页面展示效果应如下图:
录入完表单后提交即可:最新页面变化及后台控制台输出如下图:
录入演示:
最终效果:
如果去掉RegisterServlet 中对编码的处理代码,最终会出现乱码现象:
(code =new String(code.getBytes("iso8859-1"),"utf-8");)
(res.setContentType("text/html;charset=utf-8");)