• 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所指定的名称一致既可。



  • 相关阅读:
    CSS颜色十六进制值规律
    linux清理内存命令
    一些常用的linux命令
    读《DOOM启示录》随想
    日常分享:关于时间复杂度和空间复杂度的一些优化心得分享(C#)
    .netcore过滤器有以下几种类型
    RabbitMQ十:重要方法简述(参数)
    git 配置 ssh
    log4net学习笔记
    redis下载与安装
  • 原文地址:https://www.cnblogs.com/xiongyu/p/2326231.html
Copyright © 2020-2023  润新知