使用POST提交表单数据
一个简单的test.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>测试</title>
</head>
<body>
<form action="testServlet" method="post">
<input type="text" name="username">
<input type="submit" value="提交">
</form>
</body>
</html>
TestServlet处理如下:
package servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class TestServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置请求的编码格式
req.setCharacterEncoding("UTF-8");
// 设置响应的编码格式
resp.setContentType("UTF-8");
// 获取输入框内容
String username = req.getParameter("username");
// 输出到控制台
System.out.println(username);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
web.xml中的处理
<!--测试Servlet-->
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/testServlet</url-pattern>
</servlet-mapping>
测试结果
使用GET提交数据
把test.jsp中的method="post"改成method="get"。
同样的输入但是却出现乱码
那么该如何改变呢?
package servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class TestServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置请求的编码格式
req.setCharacterEncoding("UTF-8");
// 设置响应的编码格式
resp.setContentType("UTF-8");
// 获取输入框内容
String username = req.getParameter("username");
// 对获取内容进行转码
String s = new String(username.getBytes("ISO-8859-1"), "UTF-8");
// 输出到控制台
System.out.println(s);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
结果显示中文又显示正常了。
原因
JSP提交数据有两种方式分别是:POST和GET,两种方式对中文的处理是不同的。
POST提交只需要设置请求的编码就可以了。如:req.setCharacterEncoding("UTF-8");
GET提交则需要进行转换,因为tomcat服务器的编码是ISO8859-1,需要进行手动转码:
// 获取输入框内容
String username = req.getParameter("username");
// 对获取内容进行转码
String s = new String(username.getBytes("ISO-8859-1"), "UTF-8");