zoukankan      html  css  js  c++  java
  • Tomcat与Web.xml配置

    1、编码配置

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

    url使用GBK进行编码。

    URIEncoding用来设定通过 URI 传递的内容使用的编码,tomcat 将使用这里指定的编码对客户端传送的内容进行编码。我们通过 get 方法提交的参数实际上都是通过 uri 提交的,由这个参数管理,如果没有设定这个参数,则 tomcat 将使用默认的 iso8859-1 对客户端的内容进行编码。
    useBodyEncodingForURI使用与 Body 一样的编码来处理 URI, 这个设定是为了与 tomcat4保持兼容,原来在 tomcat4 和 tomcat5 中队参数的处理是不一样的,在 tomcat4 中 get 与 post 的编码是一样的,所以只要在过滤器中通过 request.setCharacterEncoding 设定一次就可以解决 get 与 post 的问题。然而,在 tomcat5 中,get 与 post 的处理是分开进行的,对 get 的处理通过前面的 URIEncoding进行处理,对 post 的内容依然通过 request.setCharacterEncoding 处理,为了保持兼容,就有了这个设定。
    所以,设置URIEncoding解决get中的参数问题,配置过滤器解决post的参数问题;或者设置useBodyEncodingForURItrue,get、post都使用过滤器来解决参数问题。

    2、网页编码可以设置请求头:在head中添加

      <meta http-equiv="Content-Type" content="text/html; charset=gbk" />

    3、修改浏览器配置

    ie:“internet选项/高级”中“总以utf-8发送网址”的选项的配置;
    firefox:地址栏中输入about:config,修改network.standard-url.escape-utf8 为False (缺省为True);
    如果你想让浏览器直接url-encode成utf-8,修改network.standard-url.encode-utf8为true(缺省为false)。

    4、使用Spring时可能还有如下配置

    主要针对与数据库交互时产生的乱码问题,例如插入中文记录或读取中文数据。
    <property name=”driverClassName”>
    <value>com.mysql.jdbc.Driver</value>
    </property>
    <property name=”url”>
    <value>jdbc:mysql://localhost:3306/newfang?useUnicode=true&amp;characterEncoding=gbk&amp;autoReconnect=true</value>
    </property>

    5、代码中解决乱码问题

        主要用于解决个别乱码问题,例如网页显示时中文均显示正常除一两条语句外,那么针对这一两条语句的乱码问题可用该方法。
    qString = new String(qString.getBytes(“ISO8859_1″), “GBK”);
     qString = URLEncoder.encode(qString, “GBK”); //java url 编码方法

    5、高级,web.xml配置,添加filter过滤器
        用于处理全站乱码问题,其实主要也是用于action与jsp页面交互时使用。
    <!– 用于解决中文乱码问题 –>
    <filter>
    <filter-name>Set Character Encoding</filter-name>
    <filter-class>com.qa.util.SetEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>GBK</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>Set Character Encoding</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    SetEncodingFilter代码:

    package com.qa.util;
    import javax.servlet.*;
    import java.io.*;
    
    public class SetEncodingFilter implements Filter
    {
    protected String encoding=null;//定义缺省字符编码方式
    protected boolean ignore=true;//定义客户端指定的编码方式是否应被忽略
    protected FilterConfig filterConfig=null;//定义过滤器配置对象,若为null,则说明过滤器未配置
    
    public void destroy()//停止过滤器的工作
    {
    this.encoding=null;
    this.filterConfig=null;
    }
    //设置字符编码
    public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain)
    throws IOException,ServletException
    {
    if(ignore||(req.getCharacterEncoding()==null))
    {
    req.setCharacterEncoding(selectEncoding(req));
    }
    chain.doFilter(req,res);
    }
    //启动过滤器
    public void init(FilterConfig filterConfig)throws ServletException
    {
    this.filterConfig=filterConfig;
    this.encoding=filterConfig.getInitParameter(“encoding”);
    String value=filterConfig.getInitParameter(“ignore”);
    if(value==null) this.ignore=true;
    else if(value.equalsIgnoreCase(“true”)
    ||value.equalsIgnoreCase(“yes”)) this.ignore=true;
    else this.ignore=false;
    }
    //选择合适的字符编码方式
    protected String selectEncoding(ServletRequest req)
    {
    return this.encoding;
    }
    //返回filterConfig对象
    public FilterConfig getFilterConfig()
    {
    return filterConfig;
    }
    //设置filterConfig对象
    public void setFilterConfig(FilterConfig filterConfig)
    {
    this.filterConfig=filterConfig;
    }
    }

    6、服务器apache上的乱码。
    除了以上的情况外,还有apache的配置问题,注意的方面有以下几点:
    1)conf/httpd.conf
    把AddDefaultCharset ISO-8859-1 改成 AddDefaultCharset GBK
    2)apache进行了rewrite
    把需要rewrite的url中的中文参数进行两次编码(encode),因为apache在rewrite时会做一次url解码,这时jk进行请求转发时,就不会再是编码后的字符串了;
    或者在接收请求时先用ISO-8859-1取字节流,再使用UFT-8来new String。(new String(str.getBytes(“ISO-8859-1″),”UFT-8″))

    http://blog.sina.com.cn/s/blog_6310009d01014v9d.html

  • 相关阅读:
    mac 10.15.7 修改PATH
    oc 属性类型一般用法
    ubuntu解压zip文件名乱码
    telnet 退出
    docker 根据容器创建镜像
    mac android adb device 没有显示设备
    Yii2 查看所有的别名 alias
    Yii2 App Advanced 添加 .gitignore
    ubuntu 18.04 搜狗突然就提示乱码
    An error occured while deploying the file. This probably means that the app contains ARM native code and your Genymotion device cannot run ARM instructions. You should either build your native code to
  • 原文地址:https://www.cnblogs.com/guangshan/p/4453301.html
Copyright © 2011-2022 走看看