Servlet乱码的处理与urlpattern的配置

问题:在Servlet输出html时很容易出现乱码的问题,如下面的例子所示

1,表单页面

 1 <%@ page contentType="text/html" pageEncoding="GBK" %>
2 <html>
3 <head></head>
4 <body>
5 <form action="Servlet" method="post">
6 姓名:<input type="text" name="name"><br />
7 年龄:<input type="text" name="age"><br />
8 <input type="submit" value="提交">&nbsp;&nbsp;
9 <input type="reset" value="重置">
10 </form>
11 </body>
12 </html>

2,Servlet

  A:POST提交

package com.gao.servlet;
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 ServletReceive extends HttpServlet
{
public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
{
this.doPost(req,resp);
}
public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
{
//如果是post 方法提交 则加入以下两行代码:
req.setCharacterEncoding("GBK");
//此处编码需与JSP页面中的编码格式一致
resp.setContentType("text/html;charset=GBK");
//设置页面中的编码格式
//以上两行代码必须放在resp.getWriter(); 之前
String name=req.getParameter("name");
String age=req.getParameter("age");
PrintWriter pw=resp.getWriter();
pw.print("<html>");
pw.print("<head><title>Servlet测试</title></head>");
pw.print("<body>");
pw.print("<h1>姓名:"+name+"</h1>");
pw.print("<h1>年龄:"+age+"</h1>");
pw.print("</body>");
pw.print("</html>");

}
}

  B:GET提交

 1 package com.gao.servlet;
2 import java.io.IOException;
3 import java.io.PrintWriter;
4 import javax.servlet.ServletException;
5 import javax.servlet.http.HttpServlet;
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8
9 public class ServletReceive extends HttpServlet
10 {
11 public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
12 {
13 //只需要添加这一句设置页面的编码格式
14 resp.setContentType("text/html;charset=GBK");
15 String name=req.getParameter("name");
16 String age=req.getParameter("age");
17 PrintWriter pw=resp.getWriter();
18 pw.print("<html>");
19 pw.print("<head><title>Servlet测试</title></head>");
20 pw.print("<body>");
21 pw.print("<h1>姓名:"+name+"</h1>");
22 pw.print("<h1>年龄:"+age+"</h1>");
23 pw.print("</body>");
24 pw.print("</html>");
25
26 }
27 public void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
28 {
29 this.doGet(req,resp);
30 }
31 }

还需要配置Tomcat中server.xml 中添加"URIEncoding="GBK"",如下所示,否则传过来的参数显示为乱码。

    <Connector port="80" maxHttpHeaderSize="8192"
maxThreads
="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups
="false" redirectPort="8443" acceptCount="100"
connectionTimeout
="20000" disableUploadTimeout="true"
URIEncoding
="GBK"/>




第二点就是url-pattern的配置问题,Servlet所配置的路径即是JSP页面所在的目录,至于后面的名称必须要与表单提交时所指定的名称一致,一般习惯于以Servlet的类名作为名称(但并不是必须的)。

1 <servlet>
2 <servlet-name>receiveservlet</servlet-name>
3 <servlet-class>com.gao.servlet.ServletReceive</servlet-class>
4 </servlet>
5
6 <servlet-mapping>
7 <servlet-name>receiveservlet</servlet-name>
8 <url-pattern>/JSPStudy_demo01/Servlet</url-pattern>
9 </servlet-mapping>

此处,JSP页面在JSPStudy_demo01目录中(前面的"/"代表Tomcat中server.xml所配置的虚拟目录),其后面的名称与表单的action所指定的名称一致既可。



原文地址:https://www.cnblogs.com/xiongyu/p/2326231.html