フィルター5:フィルター開発スキル-フィルターパラメーター化;(基本的な考え方:プログラムで最初に記述されたパラメーターを構成ファイルに書き込む)

目次

1つ:問題の精緻化とフィルターのパラメーター化の概要

2:フィルターパラメーター化の場合:達成するためにweb.xmlで構成する方法

3:フィルターのパラメーター化の場合:アノテーションを使用して


1つ:問題の精緻化とフィルターのパラメーター化の概要

フィルターのパラメーター化:フィルターにはいくつかの柔軟な設定項目があり、プログラムで記述する必要はありませんが、構成情報がweb.xmlに配置されるフィルター開発方法です。

フィルタのパラメータ化が必要な理由-----問題の概要フィルタ4このブログでは、CharacterEncodingFilterが文字セットフィルタとして使用されています。doFilter()メソッドで、エンコーディングメソッドをUTF-8に設定します。


2:フィルターパラメーター化の場合:達成するためにweb.xmlで構成する方法

効果:     

…………………………

注意:

        (1) web.xml構成ファイルにフィルターパラメーターを書き込みます。パラメーターを変更する必要がある場合は、構成ファイルを変更してプログラムを再起動するだけです。それ以外の場合は、ソースコードが必要な場合は、プログラム。再びオンラインになると、このプロセスは非効率的でエラーが発生しやすくなります。

        (2)一般的な作業では、柔軟な構成が必要な設定オプションを構成ファイルに入れるのが一般的です。

       (3) 1つまたは複数のフィルターパラメーターが存在する可能性があります。


3:フィルターのパラメーター化の場合:アノテーションを使用して

ええと、アノテーションの形でパラメータを設定します。これらのアノテーションはコードに記述されています。パラメータを変更する必要がある場合でも、ソースコードを変更し、再コンパイルして、再度アップロードする必要があります。したがって、パラメーターを設定するための注釈の使用は、フィルターのパラメーター化の本来の意図を満たしていないようです~~~~~、?

したがって、パラメータを頻繁に変更する必要がある場合は構成方法を使用し、パラメータを頻繁に変更しない場合はアノテーション方法を使用します。プロジェクトでは2つの方法が推奨されていないため、一般的なプロジェクトで使用するのが最適です。構成方法。

アノテーションを使用してフィルターパラメーターを実装する場合、このフィルターの開発フォームではアノテーションを使用する必要があります。

次に、フィルタークラスCharacterEncodingFilterで、注釈の形式は次のとおりです。

     ●アノテーションの@WebFilter()と@WebInitParam()がキーです。

package com.imooc.filter;

import java.io.IOException;

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.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter(filterName = "CharacterEncoding",urlPatterns="/*",
initParams = {
		@WebInitParam(name="encodingbiubiu",value="UTF-8"),
		@WebInitParam(name="p1",value="v1"),
		@WebInitParam(name="p1",value="v2")
})
public class CharacterEncodingFilter implements Filter{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	/*
	 * doFilter方法的参数是ServletRequest类型,而不是HttpServletRequest类型,需要强转一下;
	 * so,为什么doFilter方法的参数为什么不设置成HttpServletRequest类型呐?
	 */
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// 因为这个过滤器是基于HTTP请求来进行的,所以需要将ServletRequest转成HttpServletRequest
		HttpServletRequest req = (HttpServletRequest)request;
		req.setCharacterEncoding(encoding);
		HttpServletResponse res = (HttpServletResponse)response;
		res.setContentType("text/html;charset="+encoding);
		
		chain.doFilter(request, response);
		System.out.println(encoding);
	}
	
	// 设置一个类中的全局私有变量,保存下面获取到的参数值,其用意就是在初始的时候,从配置文件中进行读取;
	private String encoding;

	/**
	 * filterConfig是过滤器配置选项,通过这个对象可以提取在web.xml中设置的参数了;
	 */
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		encoding = filterConfig.getInitParameter("encodingbiubiu");
		
	}

}

効果:


注:(1)フィルターのパラメーター化はそれほど進んでいません。その本質的な目的は、プログラムに最初に書き込まれたパラメーターを構成ファイルに抽出することです。これにより、プログラムをより読みやすく、より簡単に作成できます。使用されます。維持します。この方法はこれまで何度も使用されており、非常に一般的で一般的な方法でもあります。このようなコンセプトやデザインは、大規模なプロジェクトでも必要です!

おすすめ

転載: blog.csdn.net/csucsgoat/article/details/114271003