本篇文章給大家分享的是有關Tomcat中怎么設置編碼Filter,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
專業(yè)從事網站建設、成都網站設計,高端網站制作設計,小程序制作,網站推廣的成都做網站的公司。優(yōu)秀技術團隊竭力真誠服務,采用H5建站+CSS3前端渲染技術,成都響應式網站建設公司,讓網站在手機、平板、PC、微信下都能呈現。建站過程建立專項小組,與您實時在線互動,隨時提供解決方案,暢聊想法和感受。
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這個參數外,還提供了一個ignore參數。該參數是一個開關,主要用于決定是否要忽略客戶端請求中指定的encoding,如果為true,我們看到流程會直接進行selectEncoding操作。在有特定的需要時,可以繼承該Filter并重寫其selectEncoding方法實現,例如根據請求頭中的Accept-Language項進行對應的encoding設置,或者根據session中特定的標識進行設置。
附加參數的處理
我們知道,對于Filter或Servlet等,我們都可以在web.xml中為其指定初始化參數,我們稱之為initParameter。對于我們自己的應用,可能已經定義好了要傳入的參數,直接在應用內解析傳入的值即可。
而Tomcat內部為了在多個Filter中支持多種形式的自定義initParameter,特意定義了一個工具類用于解析傳入的參數。
我們上面提到的Filter,其繼承自FilterBase這樣一個基類,而基類中主要用于進行初始化參數的設置
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中主要使用反射進行參數值的設置,即反射調用對應參數的setter進行賦值。我提到這個工具類,主要目的并不是想說反射,而是其實現的方式可以進行參考,以及對于邊界條件的考慮很周全。
例如,拿到class對應的Method之后,會判斷其參數的個數,類型等。
// 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);
}
對于參數的getter,除了getXXX,還想到了isXXX。
public static Object getProperty(Object o, String name) {
String getter = "get" + capitalize(name);
String isGetter = "is" + capitalize(name);
以上就是Tomcat中怎么設置編碼Filter,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯行業(yè)資訊頻道。
網站標題:Tomcat中怎么設置編碼Filter
瀏覽地址:http://chinadenli.net/article24/pppoce.html
成都網站建設公司_創(chuàng)新互聯,為您提供外貿建站、營銷型網站建設、建站公司、網站策劃、App開發(fā)、品牌網站制作
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯