版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、中文亂碼和過濾器,第二章,回顧與作業(yè)點(diǎn)評(píng),Java中生成一個(gè)Class對(duì)象的方法主要有哪些? Java反射技術(shù)有什么優(yōu)缺點(diǎn)? 代理模式中一般涉及哪三個(gè)角色? 靜態(tài)代理和動(dòng)態(tài)代理的區(qū)別有哪些?,本章任務(wù),使用過濾器解決中文亂碼問題 使用過濾器解決權(quán)限驗(yàn)證問題 使用過濾器進(jìn)行字符替換,本章目標(biāo),能夠解決中文亂碼問題 編碼知識(shí) 解決中文亂碼問題 掌握過濾器知識(shí) 過濾器及其作用 過濾器運(yùn)行原理 過濾器接口 過濾器的應(yīng)用,字符集與字符編碼,字符集(Character Set) 字符組成的集合,描述并定義了這個(gè)集合中可以出現(xiàn)哪些字符 字符編碼(Character Encoding) 字符集中的字符在計(jì)算機(jī)
2、中的二進(jìn)制存儲(chǔ)形式 先有字符集,再有字符編碼 一個(gè)字符集可以有多種編碼方式,字符集與字符編碼,ASCII ASCII使用7個(gè)比特進(jìn)行字符編碼,最多可以表示的字符數(shù)量為27(128)個(gè) 包括大小寫英文字母、數(shù)字、標(biāo)點(diǎn)符號(hào)、控制字符等 每個(gè)字符用一個(gè)字節(jié)表示,每個(gè)字節(jié)的最高位為0 字符“A”在用ASCII碼中用2進(jìn)制的“01000001”表示,換算成10進(jìn)制為“65”,字符集與字符編碼,ISO8859-1 ISO8859-1,又稱Latin-1或西歐語言,在ASCII的基礎(chǔ)上,使用8比特編碼,新增一些字符,兼容ASCII 新增的字符主要用來支持部分歐洲國家所使用的語言,例如德語、葡萄牙語和西班牙語
3、等 ISO8859另外定義了14個(gè)適用于不同文字的字符集(8859-2到8859-15),均共享0-127的ASCII碼,只是每個(gè)字符集都包含了128-255的其他字符 ISO8859-2:中歐語言 ISO8859-3:南歐語言 ISO8859-4:北歐語言 ,字符集與字符編碼,GB2312 1981年,開始使用國家標(biāo)準(zhǔn)信息交換用漢字編碼字符集基本集,簡稱GB2312 GB2312使用雙字節(jié)編碼,包含7445個(gè)字符。對(duì)漢字分成兩級(jí),一級(jí)為3755個(gè)常用字,二級(jí)為3008個(gè)次常用字,還收錄了682個(gè)其他字符 GB2312主要應(yīng)用在中國大陸和新加坡,兼容ASCII GBK 在GB2312的基礎(chǔ)上又
4、進(jìn)行了擴(kuò)充。在1995年,推出了漢字內(nèi)碼擴(kuò)展規(guī)范,簡稱GBK GBK收錄了21886個(gè)漢字和圖形符號(hào),其中漢字21003個(gè),圖形符號(hào)883個(gè),并且向下與GB2312編碼完全兼容,字符集與字符編碼,GB18030 GB18030-2000編碼標(biāo)準(zhǔn)是由信息產(chǎn)業(yè)部和國家質(zhì)量技術(shù)監(jiān)督局在2000年聯(lián)合發(fā)布的 在GBK編碼標(biāo)準(zhǔn)的基礎(chǔ)上進(jìn)行擴(kuò)充,增加了一些新的字符,特別是一些少數(shù)民族使用的字符 主要目的是為了解決一些生、偏、難字的問題 BIG5 BIG5又稱為大五碼,是針對(duì)繁體漢字的漢字編碼,目前廣泛應(yīng)用在在臺(tái)灣、澳門和香港地區(qū) BIG5也是雙字節(jié)編碼,一共收錄了5401個(gè)常用字和7652個(gè)次常用字,字符
5、集與字符編碼,Unicode 1991年Unicode把世界上幾十種文字整合在一個(gè)字符集中,Unicode中每個(gè)字符都有一個(gè)唯一的數(shù)字進(jìn)行表示 現(xiàn)在Unicode已被廣泛使用,Java、WindowsXP、和MS Office等軟件內(nèi)部都使用了Unicode作為內(nèi)碼 目前已經(jīng)定義了40000多個(gè)不同Unicode字符,剩余的留給將來擴(kuò)展使用。其中20000個(gè)字符用于漢字,11000左右個(gè)用于韓語音節(jié)。同樣兼容ASCII,字符集與字符編碼,UTF-8 UTF是Unicode/UCS Transformation Format (統(tǒng)一字符集/統(tǒng)一字符編碼轉(zhuǎn)換格式)的縮寫 UTF就是Unicode的
6、一種字符編碼(轉(zhuǎn)換)方法。Unicode組織推薦使用的是UTF-8和UTF-16,UTF-8是一種變長的編碼方式,也是當(dāng)前Unicode最常用的一種字符編碼(轉(zhuǎn)換)方法,字符集與字符編碼,使用Unicode編碼,一個(gè)英文字符要用兩個(gè)字節(jié),在Internet上,大多數(shù)信息使用英文表示的,如果采用Unicode編碼,將會(huì)使數(shù)據(jù)量增加一倍。為了減少存儲(chǔ)和傳輸英文字符數(shù)據(jù)的數(shù)據(jù)量,可以使用UTF-8編碼 因?yàn)橹形淖址腢nicode編碼在0 x0800與0 xffff之間,所以數(shù)據(jù)如果是中文,采用UTF-8編碼,一個(gè)中文字符將占用3個(gè)字節(jié)空間,數(shù)據(jù)量會(huì)增加50%,中文亂碼解決方法,JSP文件的中文亂碼
7、問題 Servlet的中文亂碼問題 表單處理的中文亂碼問題 Struts 2的中文亂碼問題,中文亂碼解決方法,JSP文件的中文亂碼問題 通過瀏覽器調(diào)用JSP頁面,在瀏覽器中所有的中文內(nèi)容出現(xiàn)亂碼 解決方法, 或者 ,中文亂碼解決方法,Servlet的中文亂碼問題 通過瀏覽器調(diào)用Servlet,Servlet在瀏覽器中顯示的內(nèi)容出現(xiàn)亂碼 解決方法:在Servlet使用response對(duì)輸出內(nèi)容之前,指定字符類型,response.setContentType(“text/html;charset=utf-8”);,中文亂碼解決方法,POST表單傳遞參數(shù)亂碼 通過JSP頁面、HTML頁面或者Ser
8、vlet中的表單元素提交參數(shù)給對(duì)應(yīng)的JSP頁面或者Servlet,而JSP頁面或者Servlet接收的中文參數(shù)值亂碼 解決方法:在接收POST 提交的參數(shù)之前,設(shè)定接收參數(shù)的內(nèi)容使用UTF-8編碼 更好的解決方法,就是使用過濾器技術(shù),在接收參數(shù)之前,設(shè)定傳遞的參數(shù)內(nèi)容的編碼是UTF-8,request.setCharacterEncoding(UTF-8);,中文亂碼解決方法,GET表單傳遞參數(shù)亂碼 可以通過GET方式傳遞表單參數(shù),還可以使用鏈接方式傳遞參數(shù),這種方法本質(zhì)上還是GET方式。如果傳遞參數(shù)的值是中文,也會(huì)出現(xiàn)亂碼 解決方法一:修改Tomcat的server.xml文件 解決方法二:
9、程序中進(jìn)行編碼轉(zhuǎn)換處理,String name=request.getParameter(name); byte b=name.getBytes(iso-8859-1); name=new String(b,utf-8); out.println(name);,中文亂碼解決方法,Struts 2的中文亂碼問題 在struts.xml中配置struts.i18n.encoding常量, ,小結(jié),常見的中文字符編碼有哪些,有什么區(qū)別? 如何解決表單提交中的中文亂碼問題?,什么是過濾器,過濾器是駐留在服務(wù)器端的Web組件,它可以截取客戶端和服務(wù)器目標(biāo)資源之間的請(qǐng)求和響應(yīng)信息,并對(duì)這些信息進(jìn)行處理 過
10、濾器是請(qǐng)求到達(dá)一個(gè)目標(biāo)資源前的預(yù)處理程序,和/或響應(yīng)離開目標(biāo)資源后的后處理程序 利用過濾器可以實(shí)現(xiàn)多種功能,例如編碼轉(zhuǎn)化、數(shù)據(jù)過濾和替換、身份驗(yàn)證、數(shù)據(jù)加密、數(shù)據(jù)壓縮、日志記錄等,過濾器的工作原理,過濾器,過濾器的工作原理,過濾器鏈 對(duì)于任意請(qǐng)求和任意響應(yīng)項(xiàng)目中任意過濾器都執(zhí)行過濾操作嗎? 請(qǐng)求與響應(yīng)時(shí)各把過濾器從頭至尾執(zhí)行一遍嗎? 各過濾器的執(zhí)行順序如何指定呢?,過濾器的工作原理,定義過濾器Filter1和Filter2,public class Filter1 implements Filter public void init(FilterConfig arg0) throws Serv
11、letException public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException System.out.println(before filter1); chain.doFilter(request, response); System.out.println(after filter1); public void destroy() ,public class Filter2 implements
12、 Filter public void init(FilterConfig arg0) throws ServletException public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException System.out.println(before filter2); chain.doFilter(request, response); System.out.println(after filter2);
13、 public void destroy() ,過濾器的工作原理,在web.xml中配置過濾器Filter1和Filter2, filter1 cn.jbit.filter.Filter1 filter1 /* filter2 cn.jbit.filter.Filter2 filter2 /* ,過濾器接口,Filter接口 任何一個(gè)過濾器必須要實(shí)現(xiàn)javax.servlet.Filter接口 Filter 接口包含以下方法,Filter 接口,init(),doFilter(),destroy(),過濾器接口,Filter接口 init(FilterConfig filterConfig)
14、Web容器調(diào)用該方法來初始化過濾器 容器在調(diào)用該方法時(shí),向過濾器傳遞FilterConfig對(duì)象 利用該對(duì)象可以得到ServletContext對(duì)象,以及在web.xml中配置的過濾器初始化參數(shù) doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 可以調(diào)用chain.doFilter()將請(qǐng)求傳給下一個(gè)過濾器或目標(biāo)資源 可以直接向客戶端返回響應(yīng)信息 可以利用RequestDispatcher的forwrard()和include()以及HttpServletResponse的sendRedi
15、rect()將請(qǐng)求轉(zhuǎn)向其他資源 destroy() 銷毀過濾器,可以在這里釋放使用完的資源,例如設(shè)置過濾器中FilterConfig為null,過濾器接口,FilterChain 接口 FilterChain 接口用于調(diào)用過濾器鏈的一系列過濾器 過濾鏈,在Web應(yīng) 用程序中所有的過濾器會(huì)構(gòu)成一個(gè)鏈狀,符合過濾條件的程序?qū)?huì)根據(jù)定義的順序執(zhí)行所有鏈中的過濾器 這個(gè)順序的設(shè)置是在web.xml中完成的,其中的先后順序指定了這個(gè)順序 調(diào)用FilterChain的唯一方法doFilter(ServletRequest, SerletResponse) 就可以傳遞到鏈中的下一個(gè)過濾器,過濾器接口,Fil
16、terConfig接口 在初始化過程中,容器使用 FilterConfig 將信息傳遞給過濾器 FilterConfig 接口包含以下方法,getFilterName(),getInitParameter(),getInitParameterNames(),getServletContext(),FilterConfig,開發(fā)字符編碼過濾器,使用Servlet進(jìn)行登錄驗(yàn)證,無法正確識(shí)別和顯示中文 可以在Servlet中通過使用以下語句進(jìn)行處理,但作用僅限于當(dāng)前Servlet 通過Filter進(jìn)行處理,可以作用于多個(gè)Servlet,request.setCharacterEncoding(“ut
17、f-8) ; response.setContentType(text/html;charset=utf-8);,開發(fā)字符編碼過濾器,public class EncodingFilter implements Filter FilterConfig filterConfig; String encoding; public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException String contentTy
18、pe = text/html;charset=+encoding; response.setContentType(contentType); request.setCharacterEncoding(encoding); chain.doFilter(request, response); public void init(FilterConfig filterConfig) throws ServletException this.filterConfig = filterConfig; encoding = filterConfig.getInitParameter(encoding);
19、 if (encoding = null) encoding = gbk; public void destroy() filterConfig = null; ,開發(fā)字符編碼過濾器,讀取初始化參數(shù),進(jìn)行編碼處理,開發(fā)字符編碼過濾器, encoding cn.jbit.filter.EncodingFilter encoding utf-8 encoding /* ,配置字符編碼過濾器,指定初始化參數(shù),提高靈活性,練習(xí)開發(fā)字符編碼過濾器,需求說明: 開發(fā)字符編碼過濾器,解決中文亂碼問題 實(shí)現(xiàn)步驟 參考本專題實(shí)現(xiàn)步驟和代碼,完成時(shí)間:20分鐘,共性問題集中講解,常見調(diào)試問題及解決辦法 代碼規(guī)范問
20、題,共性問題集中講解,開發(fā)權(quán)限控制過濾器,用戶必須登錄才能訪問網(wǎng)站資源,如果直接訪問網(wǎng)站資源將重定向到登陸頁面,從而提高網(wǎng)站安全性 使用過濾器進(jìn)行權(quán)限驗(yàn)證 如果訪問登錄頁面,或者提交登錄,則不進(jìn)行過濾 其他情況都要判斷是否登錄,如果沒有登錄則重定向到登錄頁面,開發(fā)權(quán)限控制過濾器,public class VerifyFilter implements Filter public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, Servle
21、tException HttpServletRequest httpreq = (HttpServletRequest) request; HttpServletResponse httpresp = (HttpServletResponse) response; HttpSession session = httpreq.getSession(); String path1 = httpreq.getRequestURI(); int n1 = path1.indexOf(/login/login.jsp); String path2 = httpreq.getServletPath();
22、int n2 = path2.indexOf(servlet/Login); if (n1 != -1 | n2 != -1) chain.doFilter(request, response); else String username = (String) session.getAttribute(username); if (username = null) httpresp.sendRedirect(/filter/login/login.jsp); ,開發(fā)權(quán)限控制過濾器,開發(fā)權(quán)限控制過濾器, Verify cn.jbit.filter.VerifyFilter Verify /* ,
23、配置權(quán)限控制過濾器,練習(xí)開發(fā)權(quán)限控制過濾器,需求說明: 開發(fā)權(quán)限控制過濾器,使用戶必須登錄才可以訪問網(wǎng)站資源,否則將重定向到登陸頁面 實(shí)現(xiàn)步驟 參考本專題實(shí)現(xiàn)步驟和代碼,完成時(shí)間:20分鐘,共性問題集中講解,常見調(diào)試問題及解決辦法 代碼規(guī)范問題,共性問題集中講解,開發(fā)字符替換過濾器,需要對(duì)輸入的中“” 、“”、“ ”等字符進(jìn)行替換??梢允褂眠^濾器完成該功能,HttpServletRequest類并沒有提供對(duì)請(qǐng)求信息進(jìn)行修改的setXXX()方法,所以雖然過濾器可以截取到請(qǐng)求數(shù)據(jù)卻無法修改 雖然不能直接改變請(qǐng)求對(duì)象的狀態(tài),但可以利用請(qǐng)求的包裝類(wrapper)來間接改變請(qǐng)求數(shù)據(jù) 請(qǐng)求包裝類的構(gòu)
24、造方法中接受真正的請(qǐng)求對(duì)象,然后利用該對(duì)象的方法完成自己需要實(shí)現(xiàn)的方法 有了包裝類,要改變請(qǐng)求信息就非常簡單了,只需要編寫一個(gè)包裝類的子類,然后覆蓋想要修改的方法即可 在過濾器的doFilter方法中,需要構(gòu)造一個(gè)包裝類的子類的實(shí)例,并作為參數(shù)傳遞給Chain.doChain()方法,開發(fā)字符替換過濾器,開發(fā)字符替換過濾器,public class MyRequestWrapper extends HttpServletRequestWrapper public String getParameter(String str) String param = super.getParameter(str); return t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高三化學(xué)(真題解析)2025-2026年下學(xué)期試題及答案
- 2025年大學(xué)文學(xué)(文學(xué)評(píng)論寫作)試題及答案
- 2025年高職學(xué)前教育基礎(chǔ)(學(xué)前基礎(chǔ))試題及答案
- 2025年大學(xué)文字處理(文字處理基礎(chǔ))試題及答案
- 2025年中職(畜牧獸醫(yī))動(dòng)物臨床診斷試題及答案
- 2026年綜合服務(wù)(服務(wù)優(yōu)化)考題及答案
- 2025年高職會(huì)計(jì)論文答辯(論文答辯)試題及答案
- 深度解析(2026)《GBT 18239-2000集成電路(IC)卡讀寫機(jī)通 用規(guī)范》(2026年)深度解析
- 深度解析(2026)《GBT 18195-2000精密機(jī)械用六角螺母》
- 深度解析(2026)《GBT 18025-2000農(nóng)業(yè)灌溉設(shè)備 電動(dòng)或電控灌溉機(jī)械的電氣設(shè)備和布線》
- 《家事糾紛化解綜合服務(wù)規(guī)范》
- DB11∕T 1010-2019 信息化項(xiàng)目軟件開發(fā)費(fèi)用測算規(guī)范
- 《新媒體營銷》課件 第一章 新媒體概述
- 交通安全培訓(xùn)及宣傳課件
- 2025年社區(qū)工作者招聘考試(公共基礎(chǔ)知識(shí))試題及答案
- 施工現(xiàn)場質(zhì)量、安全管理制度(3篇)
- 公益訴訟檢察課件
- 中藥制劑膏劑課件
- 2025年廣西普法考試試題及答案
- 化妝品禁用植(動(dòng))物原料目錄
- 體態(tài)健康矯正課件
評(píng)論
0/150
提交評(píng)論