<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 8,  comments - 11,  trackbacks - 0
    本文轉(zhuǎn)自BeanSoft: http://m.tkk7.com/beansoft/archive/2007/10/09/151368.html

    常見的 Tomcat 5 表單編碼提交后亂碼的解決方案有很多, 有改 Tomcat Connector 屬性的, 有加過濾器的. 但是 Tomcat 自帶的那個(gè)過濾器只解決了 POST 方式的亂碼卻不能處理 GET 方式的亂碼.  在這里那我就給出一個(gè)不需要修改任何 Tomcat 配置文件的完美解決中文問題的過濾器的代碼:

    首先是我們的測(cè)試頁(yè)面:

    GET 方式: POST 方式:

    index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
        <head>
        <title>表單測(cè)試頁(yè)面</title>
        </head>
        <body>
        <form action="action.jsp">
        GET 方式: <input type=text name="name" value="GET 中文">
        <input type=submit>
        </form>
        <form action="action.jsp" method="POST">
        POST 方式: <input type=text name="name" value="POST 中文">
        <input type=submit>
        </form>
        </body>
        </html>
        

    和普通的表單沒有任何區(qū)別.

    然后就是表單提交頁(yè)面 action.jsp:

    <%@ page language="java" pageEncoding="GBK"%>
        <html>
        <body>
        參數(shù): <%=request.getParameter("name") %> <br>
        </body>
        </html>

    接著是過濾器的配置文件 web.xml (用 2.5 版本也可以):

    <?xml version="1.0" encoding="UTF-8"?>
        <web-app version="2.4"
        xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        <filter>
        <filter-name>TomcatFormFilter</filter-name>
        <filter-class>filters.TomcatFormFilter</filter-class>
        </filter>
        <filter-mapping>
        <filter-name>TomcatFormFilter</filter-name>
        <url-pattern>*.jsp</url-pattern>
        </filter-mapping>
        <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
        </web-app>

    最后最關(guān)鍵的就是我們的過濾器代碼了, 對(duì) GET 方式使用請(qǐng)求包裝器, 而 POST 方式則用 setCharacterEncoding():

    package filters;
        import java.io.IOException;
        import javax.servlet.Filter;
        import javax.servlet.FilterChain;
        import javax.servlet.FilterConfig;
        import javax.servlet.ServletException;
        import javax.servlet.ServletRequest;
        import javax.servlet.ServletResponse;
        import javax.servlet.ServletException;
        import  javax.servlet.http.HttpServlet;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletRequestWrapper;
        import javax.servlet.http.HttpServletResponse;
        public class TomcatFormFilter implements Filter {
        /**
              * Request.java
              * 對(duì) HttpServletRequestWrapper 進(jìn)行擴(kuò)充, 不影響原來的功能并能提供所有的 HttpServletRequest
              * 接口中的功能. 它可以統(tǒng)一的對(duì) Tomcat 默認(rèn)設(shè)置下的中文問題進(jìn)行解決而只需要用新的 Request 對(duì)象替換頁(yè)面中的
              * request 對(duì)象即可.
              */
        class Request extends HttpServletRequestWrapper
        {
        public Request(HttpServletRequest request) {
        super(request);
        }
        /**
                 * 轉(zhuǎn)換由表單讀取的數(shù)據(jù)的內(nèi)碼.
                 * 從 ISO 字符轉(zhuǎn)到 GBK.
                 */
        public String toChi(String input) {
        try {
        byte[] bytes = input.getBytes("ISO8859-1");
        return new String(bytes, "GBK");
        }
        catch (Exception ex) {
        }
        return null;
        }
        /**
                 * Return the HttpServletRequest holded by this object.
                 */
        private HttpServletRequest getHttpServletRequest()
        {
        return (HttpServletRequest)super.getRequest();
        }
        /**
                 * 讀取參數(shù) -- 修正了中文問題.
                 */
        public String getParameter(String name)
        {
        return toChi(getHttpServletRequest().getParameter(name));
        }
        /**
                 * 讀取參數(shù)列表 - 修正了中文問題.
                 */
        public String[] getParameterValues(String name)
        {
        String values[] = getHttpServletRequest().getParameterValues(name);
        if (values != null) {
        for (int i = 0; i < values.length; i++) {
        values[i] = toChi(values[i]);
        }
        }
        return values;
        }
        }
        public void destroy() {
        }
        public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpreq = (HttpServletRequest)request;
        if(httpreq.getMethod().equals("POST")) {
        request.setCharacterEncoding("GBK");
        } else {
        request = new Request(httpreq);
        }
        chain.doFilter(request, response);
        }
        public void init(FilterConfig filterConfig) throws ServletException {
        }
        }
        

    怎么樣, 是不是很簡(jiǎn)單也很方便呢?


    posted on 2007-10-14 22:16 詩(shī)語江南 閱讀(441) 評(píng)論(0)  編輯  收藏 所屬分類: Core JAVA
    <2007年10月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    友情連接

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 又粗又长又爽又长黄免费视频 | 四虎成人精品在永久免费| 久久国产亚洲高清观看| 成人片黄网站色大片免费观看APP| 亚洲午夜精品久久久久久浪潮 | 亚洲精品成人网久久久久久| 亚洲精品无码成人| 国产成人免费A在线视频| 亚洲爆乳精品无码一区二区| 日韩在线视频免费看| 国产亚洲Av综合人人澡精品| 免费乱理伦在线播放| ww在线观视频免费观看w| 亚洲一区二区三区自拍公司| 国产午夜成人免费看片无遮挡| 亚洲第一AAAAA片| 久久久精品2019免费观看| 精品久久久久久亚洲精品| 国产成人无码区免费A∨视频网站| 日韩成人毛片高清视频免费看| 亚洲熟女乱综合一区二区| 无码日韩精品一区二区免费暖暖| 亚洲国产精品久久丫| 国产美女a做受大片免费| A国产一区二区免费入口| 久久亚洲日韩精品一区二区三区| 免费可以在线看A∨网站| 国产成人va亚洲电影| 国产精品亚洲精品日韩已满| 免费无遮挡无码永久视频| 亚洲乱亚洲乱妇24p| 亚洲精品国产V片在线观看| 免费看搞黄视频网站| 亚洲一区二区三区国产精华液| 亚洲国产精品狼友中文久久久| 国内精品久久久久影院免费 | 成年性羞羞视频免费观看无限| 特级毛片免费播放| 亚洲人成在线影院| 国产成人无码区免费A∨视频网站| 免费观看在线禁片|