将应用从weblogic移植到tomcat时学习了一个servlet规范

一个遗留web网页(gbk编码)需要POST方式请求一个servlet应用(utf-8), 得写一个filter进行转码。关于form表单提交的编码问题,可以参考这个: Java Web应用的form文字编码问题,或者 在IE下面指定表单编码方式

 

参照上面的第一个文档,这个filter很好写:

 

public void doFilter(ServletRequest servletRequest,
                       ServletResponse servletResponse,
                       FilterChain filterChain) throws
      IOException, ServletException {
    if(servletRequest.getCharacterEncoding()==null){
      String encoding = servletRequest.getParameter("_charset_");
      if(encoding == null){
        encoding = _defaultEncoding;
      }
      if (encoding != null) {
        servletRequest.setCharacterEncoding(encoding);
        if(LOG.isDebugEnabled()){
          LOG.debug("Set request encoding to:"+encoding);
        }
      }
    }
    filterChain.doFilter(servletRequest, servletResponse);
  }
 

 

 

这段代码在weblogic8下面应用良好,gbk编码的网页很好的提交到一个utf-8编码的servlet应用,没有其他的额外转码工作。

 

当移植到tomcat6下面时,乱码问题出现了。即使通过一个utf-8编码的网页来提交依然乱码,request中的数据是iso-8859-1编码。很久没有碰到过乱码问题了,于是我又不自信起来,找了每个环节的问题。最后终于发现是这个filter没有遵循一个servlet规范,ServletRequest的文档中说:

setCharacterEncoding

public void setCharacterEncoding(java.lang.String env)
                          throws java.io.UnsupportedEncodingException
Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader().
Parameters:
a - String containing the name of the chararacter encoding.
Throws:
java.io.UnsupportedEncodingException - if this is not a valid encoding

 

我错了,光看方法名字就开练,api文档看得不够仔细。在这次迁移工作中,学了这么一个servlet规范。

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值