成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Struts教程-如何避免出現(xiàn)亂碼

開發(fā) 后端
JSP開發(fā)中經(jīng)常出現(xiàn)中文亂碼問題,所以必須提前處理。本Struts教程中,只要用戶名和密碼都是123,才返回成功的頁面。為了處理中文,我們設(shè)定判斷只有用戶名是張三才登陸成功。

JSP開發(fā)中經(jīng)常出現(xiàn)中文亂碼問題,所以必須提前處理。本Struts教程中前面例子中,只要用戶名和密碼都是123,才返回成功的頁面。為了處理中文,我們設(shè)定判斷只有用戶名是張三才登陸成功。

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

下面是效果圖:

如圖鍵入:中文

Struts教程"" 


顯示結(jié)果如下圖:

Struts教程"" 


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

 

Struts教程"" 

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

2、解決辦法:

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

 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;
         }
}



小結(jié):這辦法雖然能解決中文亂碼,但是每次還得調(diào)用,是不是很不方便呢?如果忘記了調(diào)用這個方法,那程序又亂碼了,維護起來很困難,下面我們看另一種解決方案。

#p#

B、繼承RequestProcessor類

RequestProcessor類處理ActionServlet接收到的所有請求。根據(jù)它的處理方式,可將每個請求分解為多個小任務(wù),分別由不同的方法執(zhí)行。這就允許針對請求的各個單獨部分自定義處理。

RequestProcessor類的部分方法如下:

processPath():                    獲取客戶端請求的路徑URI
processMapping():              根據(jù)請求URI獲取所需的映射信息
processRoles():                  檢查用戶的角色是否允許他訪問請求的資源
processActionForm():        新建一個Form Bean或從請求會話中檢索Form Bean
processForward():              處理元素forward以匹配當(dāng)前的請求路徑
processValidate():                調(diào)用Form Bean的validate()方法
processPreprocess():         告訴請求處理器調(diào)用此方法后,是否應(yīng)繼續(xù)處理請求
processLocale():                 為請求選擇一個語言環(huán)境
processActionCreate():               實例化當(dāng)前ActionMapping指定的類的實例
processActionPerform():     將調(diào)用action的perform()或execute()方法

呵呵,發(fā)沒發(fā)現(xiàn)RequestProcess類的所有方法都有一個前綴proess,接著往下看吧。

RequestProcessor在action之前,所以我們應(yīng)著手RequestProcessor,要開發(fā)自己的RequestProcessor類,步驟如下:

(1)     創(chuàng)建一個繼承org.apache.struts.action.RequestProcessor的類,在改類中顯示定義一個無參,方法體為空的構(gòu)造器。

(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,在其中加入一個名為的元素,用以指定我們定制的RequestProcessor類。

http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">


    


path="/login"
name="loginActionForm"
scope="request"
type="actions.LoginAction">


上面就是我們自己的定義的RequestProcessor類,使用標(biāo)簽類定義。

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

C、Filter來解決中文問題
       

Filter,是不是你腦子里閃現(xiàn)了這個詞呢?下面就來看看如何用它來改寫我們上一章節(jié)的例子吧!

(1) 首先在工程中新建一包,命名為filter,在下面新建一類文件,命名為EncodingServlet,并繼承HttpServlet、實現(xiàn)Filter接口,注意并實現(xiàn)接口的方法。

在Servlet中filter起著過濾器的作用,當(dāng)一個請求發(fā)送到服務(wù)器的時候,需要把請求首先交給filter來處理,然后交給action做處理。EncodingServlet負(fù)責(zé)處理請求的字符集,在此就起這么個功能,具體代碼請依照如下所示:

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。


               EncodingServlet
               servlets.EncodingServlet


               EncodingServlet
               /*

小結(jié):這個中文亂碼處理用了fileter,而且適用與任何場合,比較實用。

您正在閱讀的是“Struts教程-避免出現(xiàn)亂碼

【編輯推薦】

  1. 在Eclipse中開發(fā)struts應(yīng)用程序
  2. 手把手教你在Eclipse中配置開發(fā)Struts
  3. Eclipse下開發(fā)struts完整解決亂碼問題
  4. Struts2教程7:上傳任意多個文件
  5. 詳解Struts中Validator驗證框架的使用
責(zé)任編輯:張燕妮 來源: 百度空間
相關(guān)推薦

2021-09-16 09:05:45

SQL注入漏洞網(wǎng)絡(luò)攻擊

2010-08-24 10:11:02

虛擬化部署

2009-01-12 17:52:10

服務(wù)器虛擬化VMware

2020-02-19 10:45:04

開發(fā)技能代碼

2023-06-21 10:09:50

2019-11-01 16:23:52

存儲云存儲數(shù)據(jù)

2024-03-04 07:50:04

Python字符編碼網(wǎng)絡(luò)通信

2011-05-23 09:51:30

MySQL

2011-06-20 16:04:29

SEO

2009-06-30 14:02:00

Struts亂碼Eclipse

2009-06-25 15:26:25

Struts2教程struts.xml常

2009-06-10 15:27:08

netbeans 編碼亂碼

2009-02-04 11:37:15

2009-06-05 09:55:50

struts 亂碼Eclipse工具

2013-03-25 10:15:57

2021-03-01 15:52:14

開源開源軟件陷阱

2020-08-20 08:23:52

VueDOM運算符

2009-06-25 16:04:30

2009-06-03 14:19:34

Struts2Guice

2009-06-25 15:11:28

Struts2教程Struts2程序
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲 欧美 日韩 精品 | 日韩在线免费观看视频 | 国产一区二区日韩 | 天天天操天天天干 | 国产精品久久久久久久模特 | 91麻豆精品一区二区三区 | 日韩成人av在线 | 欧美videosex性极品hd | 成人黄色电影免费 | 午夜精品导航 | 欧美一级观看 | 在线看日韩| 九九视频在线观看 | 网站国产| 91精品国产乱码久久久久久久久 | 伊人精品一区二区三区 | 欧美网站一区二区 | 欧美激情欧美激情在线五月 | 成人在线播放网站 | 超黄毛片 | 视频在线亚洲 | www..com18午夜观看 | 久久久久国色av免费观看性色 | 91av大全 | 国产成人精品免费视频大全最热 | 青青草av在线播放 | 欧美一区二区成人 | h视频免费在线观看 | 国产欧美日韩一区 | 欧美精品一区二区三区四区 在线 | 久热久热 | 亚洲人成人网 | 色综合天天综合网国产成人网 | 亚洲精品成人网 | 国产精品亚洲成在人线 | 日韩a v在线免费观看 | 国产精品久久久久久福利一牛影视 | 精品一区二区三区免费毛片 | 激情小说综合网 | 成人精品一区二区户外勾搭野战 | 日韩久久久久久久 |