资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 编程开发 >
Advertisement
文章正文

解决Tomcat 编码问题的Character Encoding 另类过滤器实现. _编程

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   
  • strust框架中java web应用的中文化问题解决  
  • 基于Lucene的Mp3检索器  
  • 【问题】究竟什么是MVC  
  • In search of a better persistence API(摘)  
  • J2ME Wireless Toolkit 2.2 新改进  
  • 一个MIDP俄罗斯方块游戏的设计和实现  
  • PicoContainer-One minute description  
  • java.util.Collections.sort(List list)与Comparable,Comparator 接口  
  • 配置Tomcat5.5和IIS5之解疑  
  • JBuilder2005 下 jsp2.0 初体验  
  • 页面导航:

    正文内容:

    使用我写的这个class,然后再tomcat里配置一下,比在自己的webapp里配置的过滤器还要方便,高效。
    一行配置就搞定:

    server.xml里增加下面的配置:
    <valve classname="org.apache.catalina.valves.charsetvalve" encoding="gbk"/>
    可以放到engine, host, 或者 context 元素中:

    例如:
    <context docbase="d:\lizongbo\mywebapp" path="/lizongbo"
      privileged="true" antiresourcelocking="false" antijarlocking="false">
    <valve classname="org.apache.catalina.valves.charsetvalve" encoding="gbk"/>
    </context>

    当然这个class不存在的,于是,下面是java代码,
    把编译好的class放到 d:\jakarta-tomcat-5.5.7
    \server\classes\org\apache\catalina\valves\下,就可以了。

    java 代码:

    package org.apache.catalina.valves;

    import java.io.*;
    import javax.servlet.*;

    import org.apache.catalina.*;
    import org.apache.catalina.connector.*;
    import org.apache.catalina.util.*;

    /**
     * <p>title: charsetvalve </p>
     * <p>description: a charset filter for tomcat application</p>
     * <p>copyright: apache license version 2.0  </p>
     * <p>company: lizongbo</p>
     * @author lizongbo @ gmail.com
     * @version 1.0
     */
    public class charsetvalve
      extends valvebase implements lifecycle {
      public charsetvalve() {
      super();
      }

      protected lifecyclesupport lifecycle = new lifecyclesupport(this);

      private stringmanager sm =
      stringmanager.getmanager(constants.package);

      private boolean started = false;
      private string encoding = system.setproperty("file.encoding", "gbk");

      public string getencoding() {
      return encoding;
      }

      public void setencoding(string encoding) {
      this.encoding = encoding;
      }

      public void invoke(request request, response response) throws ioexception,
      servletexception {
      request.getrequest().setcharacterencoding(getencoding());
      getnext().invoke(request, response);

      }

      public void addlifecyclelistener(lifecyclelistener listener) {
      lifecycle.addlifecyclelistener(listener);
      }

      public lifecyclelistener[] findlifecyclelisteners() {
      return lifecycle.findlifecyclelisteners();

      }

      public void removelifecyclelistener(lifecyclelistener listener) {

      lifecycle.removelifecyclelistener(listener);

      }

      public void start() throws lifecycleexception {

      if (started) {
      throw new lifecycleexception
      (sm.getstring("accesslogvalve.alreadystarted"));
      }

      }

      public void stop() throws lifecycleexception {
      if (!started) {
      throw new lifecycleexception
      (sm.getstring("accesslogvalve.notstarted"));
      }
      lifecycle.firelifecycleevent(stop_event, null);
      started = false;

      }
    }



    详情请参考:
    http://issues.apache.org/bugzilla/show_bug.cgi?id=32795
    http://jakarta.apache.org/tomcat/tomcat-5.5-doc/config/valve.html

    对了,tomcat的示例里:
    d:\jakarta-tomcat-5.5.7\webapps\servlets-examples\web-inf\web.xml

    里被日本人强制指定默认值为日文编码了,ft!!!!!!!!!!!!!!!!!!!!!!!!!!!

    <filter>
    <filter-name>set character encoding</filter-name>
    <filter-class>filters.setcharacterencodingfilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>euc_jp</param-value>
    </init-param>
    </filter>



     

     
    热门推荐笔记本: IBM笔记本
    相关文章:
    webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
    ©2007 popbb.net All Rights Reserved