本篇文章給大家分享的是有關Tomcat中怎么設置編碼Filter,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
專業(yè)從事網(wǎng)站建設、成都網(wǎng)站設計,高端網(wǎng)站制作設計,小程序制作,網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術團隊竭力真誠服務,采用H5建站+CSS3前端渲染技術,成都響應式網(wǎng)站建設公司,讓網(wǎng)站在手機、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項小組,與您實時在線互動,隨時提供解決方案,暢聊想法和感受。
1. SetCharacterEncodingFilter
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) {
// Conditionally select and set the character encoding to be used
if (ignore|| (request.getCharacterEncoding()== null)) {
String characterEncoding = selectEncoding(request);
if (characterEncoding != null) {
request.setCharacterEncoding(characterEncoding);
}
}
chain.doFilter(request, response);
}
Filter的doFilter方法如上所示,在這個類中,除了encoding這個參數(shù)外,還提供了一個ignore參數(shù)。該參數(shù)是一個開關,主要用于決定是否要忽略客戶端請求中指定的encoding,如果為true,我們看到流程會直接進行selectEncoding操作。在有特定的需要時,可以繼承該Filter并重寫其selectEncoding方法實現(xiàn),例如根據(jù)請求頭中的Accept-Language項進行對應的encoding設置,或者根據(jù)session中特定的標識進行設置。
附加參數(shù)的處理
我們知道,對于Filter或Servlet等,我們都可以在web.xml中為其指定初始化參數(shù),我們稱之為initParameter。對于我們自己的應用,可能已經(jīng)定義好了要傳入的參數(shù),直接在應用內(nèi)解析傳入的值即可。
而Tomcat內(nèi)部為了在多個Filter中支持多種形式的自定義initParameter,特意定義了一個工具類用于解析傳入的參數(shù)。
我們上面提到的Filter,其繼承自FilterBase這樣一個基類,而基類中主要用于進行初始化參數(shù)的設置
public void init(FilterConfig filterConfig) throws ServletException {
Enumeration<String> paramNames = filterConfig.getInitParameterNames();
while (paramNames.hasMoreElements()) {
String paramName = paramNames.nextElement();
if (!IntrospectionUtils.setProperty(this, paramName,
filterConfig.getInitParameter(paramName))) {
String msg = sm.getString("filterbase.noSuchProperty",
paramName, this.getClass().getName());
if (isConfigProblemFatal()) {
throw new ServletException(msg);
} else {
getLogger().warn(msg); }} }
這個工具類即為上面標紅的IntrospectionUtils。
Utils中主要使用反射進行參數(shù)值的設置,即反射調(diào)用對應參數(shù)的setter進行賦值。我提到這個工具類,主要目的并不是想說反射,而是其實現(xiàn)的方式可以進行參考,以及對于邊界條件的考慮很周全。
例如,拿到class對應的Method之后,會判斷其參數(shù)的個數(shù),類型等。
// First, the ideal case - a setFoo( String ) method
for (int i = 0; i < methods.length; i++) {
Class<?> paramT[] = methods[i].getParameterTypes();
if (setter.equals(methods[i].getName()) && paramT.length == 1
&& "java.lang.String".equals(paramT[0].getName())) {
methods[i].invoke(o, new Object[] { value });
return true;
}
}
在考慮其它類型時,除基礎類型外,還考慮到了包裝類
if (setter.equals(methods[i].getName())
&& methods[i].getParameterTypes().length == 1) {
// match - find the type and invoke it
Class<?> paramType = methods[i].getParameterTypes()[0];
Object params[] = new Object[1];
// Try a setFoo ( int )
if ("java.lang.Integer".equals(paramType.getName())
|| "int".equals(paramType.getName())) {
try {
params[0] = new Integer(value);
} catch (NumberFormatException ex) {
ok = false;
}
// Try a setFoo ( long )
}else if ("java.lang.Long".equals(paramType.getName())
|| "long".equals(paramType.getName())) {
try {
params[0] = new Long(value);
} catch (NumberFormatException ex) {
ok = false;
}
// Try a setFoo ( boolean )
} else if ("java.lang.Boolean".equals(paramType.getName())
|| "boolean".equals(paramType.getName())) {
params[0] = Boolean.valueOf(value);
}
對于參數(shù)的getter,除了getXXX,還想到了isXXX。
public static Object getProperty(Object o, String name) {
String getter = "get" + capitalize(name);
String isGetter = "is" + capitalize(name);
以上就是Tomcat中怎么設置編碼Filter,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站標題:Tomcat中怎么設置編碼Filter
瀏覽地址:http://jinyejixie.com/article24/pppoce.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、營銷型網(wǎng)站建設、建站公司、網(wǎng)站策劃、App開發(fā)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)