亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

Struts初級教程(2)-避免出現亂碼

2024-09-05 00:17:22
字體:
來源:轉載
供稿:網友

Jsp開發中經常出現中文亂碼問題,所以必須提前處理。前面例子中,只要用戶名和密碼都是123,才返回成功的頁面。為了處理中文,我們設定判斷只有用戶名是張三才登陸成功。

既然是中文亂碼處理,頁面的用戶輸入就是中文了,相應的action的if處理也要變成: if (username.equals("張三") && userpass.equals("123"));

    下面是效果圖:

       1、如圖鍵入:中文


顯示結果如下圖:


  為什么會到錯誤頁面呢?我們明明都寫正確了呀,是的,沒有錯誤,這是什么原因呢?
請看下圖:



我們打印才發現原來username的值傳到action中,成了亂碼,這主要由于客戶端和服務器端采用了不同的字符集,中文亂碼我們沒有處理。

二、解決辦法:
A、直接轉編碼
我們新建一個包,命名為util,在包下新建一個類文件,命名為EncodingUtil,類的功能就是提供一個字符集轉換的一個方法,具體代碼如下所示:
package util;

public class Encoding {
    public static String isToGB(String src) {
        String strRet = null;
        try {
            strRet = new String(src.getBytes("ISO_8859_1"), "GBK");
        } catch (Exception e) {
            e.printStackTrace();
        }
            return strRet;
        }
}
小結:這辦法雖然能解決中文亂碼,但是每次還得調用,是不是很不方便呢?如果忘記了調用這個方法,那程序又亂碼了,維護起來很困難,下面我們看另一種解決方案。

B、繼承RequestProcessor類
RequestProcessor類處理ActionServlet接收到的所有請求。根據它的處理方式,可將每個請求分解為多個小任務,分別由不同的方法執行。這就允許針對請求的各個單獨部分自定義處理。
RequestProcessor類的部分方法如下:
processPath():                   獲取客戶端請求的路徑URI
processMapping():             根據請求URI獲取所需的映射信息
processRoles():                 檢查用戶的角色是否允許他訪問請求的資源
processActionForm():       新建一個Form Bean或從請求會話中檢索Form Bean
processForward():             處理<action-mapping>元素forward以匹配當前的請求路徑
processValidate():               調用Form Bean的validate()方法
processPreprocess():        告訴請求處理器調用此方法后,是否應繼續處理請求
processLocale():                為請求選擇一個語言環境
processActionCreate():              實例化當前ActionMapping指定的類的實例
processActionPerform():    將調用action的perform()或execute()方法

呵呵,發沒發現RequestProcess類的所有方法都有一個前綴proess,接著往下看吧。

RequestProcessor在action之前,所以我們應著手RequestProcessor,要開發自己的RequestProcessor類,步驟如下:

(1)    創建一個繼承org.apache.struts.action.RequestProcessor的類,在改類中顯示定義一個無參,方法體為空的構造器。
(2)    重寫所需的方法,加入我們的功能。

具體代碼如下所示:
package servlets;

import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.RequestProcessor;

public class EncodingHandler extends RequestProcessor {
    public boolean processPreprocess(HttpServletRequest servletRequest,
                                                        HttpServletResponse serveltResponse)
 {
        try {
            servletRequest.setCharacterEncoding("GBK");
            System.out.println("請求被處理.");
            } catch (UnsupportedEncodingException ex) {
        ex.printStackTrace();
    }
        return true;
     }
}

(3)    修改配置文件sturts-config.xml,在其中加入一個名為<controller>的元素,用以指定我們定制的RequestProcessor類。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
 <form-beans>
    <form-bean name="loginActionForm" type="formbeans.LoginActionForm" />
 </form-beans>
 <action-mappings>
<action
path="/login"
name="loginActionForm"
scope="request"
type="actions.LoginAction">
      <forward name="success" path="/success.jsp"/>
      <forward name="error" path="/wrong.jsp"/>
    </action>
 </action-mappings>
 <controller processorClass="servlets.EncodingHandler" />
</struts-config>

上面就是我們自己的定義的RequestProcessor類,使用<controller>標簽類定義。

小結:這樣做呢?問題是解決了,每一個請求先經過這個方法,并轉換了字符集再交給action做處理,這樣我們不用在操心中文亂碼,但RequestProcessor是與struts耦合在一塊兒。如果不用struts框架,我們又該如何處理中文問題呢?是否又更好的辦法呢?那就接著跟我往下看吧。

C、Filter來解決中文問題
       Filter,是不是你腦子里閃現了這個詞呢?下面就來看看如何用它來改寫我們上一章節的例子吧!
(1) 首先在工程中新建一包,命名為filter,在下面新建一類文件,命名為EncodingServlet,并繼承HttpServlet、實現Filter接口,注意并實現接口的方法。
在Servlet中filter起著過濾器的作用,當一個請求發送到服務器的時候,需要把請求首先交給filter來處理,然后交給action做處理。EncodingServlet負責處理請求的字符集,在此就起這么個功能,具體代碼請依照如下所示:
package servlets;

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.http.HttpServlet;

public class EncodingServlet extends HttpServlet implements Filter {

       private static final long serialVersionUID = 1L;
       public void doFilter(ServletRequest servletRequest,
          ServletResponse serveltResponse, FilterChain filterChain) {
              try {
                    servletRequest.setCharacterEncoding("GBK");
                    filterChain.doFilter(servletRequest, serveltResponse);
              } catch (Exception ex) {
              }
       }
       public void init(FilterConfig arg0) throws ServletException {
       }
}

(2)      修改web.xml,加入我們的filter。
<filter>
              <filter-name>EncodingServlet</filter-name>
              <filter-class>servlets.EncodingServlet</filter-class>
</filter>
<filter-mapping>
              <filter-name>EncodingServlet</filter-name>
              <url-pattern>/*</url-pattern>
</filter-mapping>
小結:這個中文亂碼處理用了fileter,而且適用與任何場合,比較實用。
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久中文字幕| 91免费福利视频| 久久露脸国产精品| xxav国产精品美女主播| 欧美精品18videosex性欧美| 久久精品小视频| 精品福利在线观看| 国产日本欧美一区二区三区| 97香蕉超级碰碰久久免费的优势| 68精品久久久久久欧美| 成人激情在线播放| 欧洲一区二区视频| 久久精品亚洲一区| 91精品国产综合久久男男| 91久久国产综合久久91精品网站| 精品调教chinesegay| 97国产成人精品视频| 久久久精品一区| 国产成人精品午夜| 中文字幕日韩av综合精品| 日韩成人在线免费观看| 欧美野外猛男的大粗鳮| 日本一区二三区好的精华液| 成人综合网网址| 久久免费国产精品1| 91在线免费网站| 久久福利网址导航| 国产主播精品在线| 国产精品扒开腿做爽爽爽的视频| 亚洲自拍偷拍一区| 欧美日韩国产一区中文午夜| 日韩大片免费观看视频播放| 激情成人中文字幕| 主播福利视频一区| 亚洲高清久久久久久| 亚洲国产精品999| 一区二区欧美激情| 欧美性高潮床叫视频| 国内免费久久久久久久久久久| 国产精品爱久久久久久久| 亚洲a级在线观看| 日韩欧美在线一区| 日韩在线视频免费观看| 亚洲成色777777女色窝| 亚洲高清在线观看| 亚洲欧美成人精品| 精品丝袜一区二区三区| 国产精品久久久久久久9999| 一二美女精品欧洲| 亚洲第一福利网| 欧美日韩在线另类| 欧美日韩国产第一页| 欧美亚州一区二区三区| 亚洲а∨天堂久久精品喷水| 中文精品99久久国产香蕉| 97国产精品视频| 久久精品视频中文字幕| 欧美激情精品久久久久久黑人| 精品人伦一区二区三区蜜桃免费| 91精品视频在线播放| 亚洲精品美女网站| 欧美激情综合色综合啪啪五月| 在线看片第一页欧美| 亚洲欧美国产日韩天堂区| 欧美成人激情图片网| 久久综合久久八八| 久久久久久成人精品| 亚洲一区二区三区sesese| 黄网站色欧美视频| 国产日韩在线一区| 国产精品69精品一区二区三区| 久久精品视频一| 日韩中文字在线| 日本中文字幕成人| 欧美成在线视频| 亚洲国产欧美自拍| 一本大道香蕉久在线播放29| 色综合久久88| 日韩理论片久久| 国产精品一区二区电影| 精品偷拍一区二区三区在线看| 亚洲护士老师的毛茸茸最新章节| 欧美黄网免费在线观看| 18久久久久久| 亚洲精品视频久久| 91精品久久久久久久久久久久久| 国产综合在线看| 91亚洲精品在线| 亚洲精品福利免费在线观看| 欧美激情视频在线| 一本大道久久加勒比香蕉| 中文字幕视频一区二区在线有码| 国产精品视频内| 久久艹在线视频| 亚洲欧美一区二区激情| 国产精品久久久久久久久久新婚| 久久视频在线观看免费| 中文字幕日韩综合av| 久久久精品视频在线观看| 欧洲美女7788成人免费视频| 日韩av理论片| 久久久精品视频在线观看| 69国产精品成人在线播放| 91av在线免费观看视频| 日韩av第一页| 国产精品久久久久久久久久小说| 欧美黄色片在线观看| 正在播放欧美一区| 日韩在线欧美在线国产在线| 欧美精品制服第一页| 国产精品免费网站| 成人国产在线激情| 亚洲欧美另类自拍| 欧美精品在线观看| 日韩欧美a级成人黄色| 日韩电影免费观看在线观看| 一本一本久久a久久精品综合小说| 欧美成人午夜免费视在线看片| 97超级碰碰人国产在线观看| 国产精品久久久久久搜索| 欧美日韩视频免费播放| 国产成人在线视频| 日韩麻豆第一页| 亚洲精品99久久久久| 91av在线看| 国产精品香蕉在线观看| 欧美激情第三页| 91在线视频一区| 国产a∨精品一区二区三区不卡| 色悠悠久久88| 国产精品免费久久久久影院| 欧美激情亚洲视频| 国产精品人人做人人爽| 色综合亚洲精品激情狠狠| 久久天天躁狠狠躁夜夜爽蜜月| 国产人妖伪娘一区91| 欧美成人自拍视频| 欧美成人精品h版在线观看| www.亚洲成人| 性欧美长视频免费观看不卡| 亚洲国产精品久久91精品| 久久久久国产精品www| 亚洲欧美精品在线| 久久中文字幕视频| 欧美性色视频在线| 色悠悠国产精品| 久久99热这里只有精品国产| 欧美亚洲免费电影| 91精品国产91久久久久久不卡| 91产国在线观看动作片喷水| 国产精品夫妻激情| 国产成人精品优优av| 亚洲欧美一区二区三区四区| 日韩av在线免费观看一区| 日韩最新中文字幕电影免费看| 亚洲国产成人精品女人久久久| 国产色综合天天综合网| 在线视频精品一| 亚洲一二在线观看| 欧美成人精品一区| 欧美激情欧美激情在线五月| 777午夜精品福利在线观看| 最近2019好看的中文字幕免费| 国产丝袜精品第一页|