転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

【技術書メモ】基礎からのサーブレット⑲

web.xmlからサーブレットの初期化パラメータを読み込む

<servlet>
	<servlet-name>param-servlet</servlet-name>
	<servlet-class>chapter19.ParamServlet</servlet-class>

	<!-- 初期化パラメータ -->
	<init-param>
		<param-name>message</param-name>
		<param-value>servlet-init-param</param-value>
	</init-param>
</servlet>

<!-- 初期化パラメータを読み込む場合、URLマッピングも記述する必要あり -->
<servlet-mapping>
	<servlet-name>param-servlet</servlet-name>
	<url-pattern>/chapter19/param-servlet</url-pattern>
</servlet-mapping>
public class ParamServlet extends HttpServlet {

	private String message;

	@Override
	public void init() throws ServletException {

		// ServletConfigオブジェクトの取得
		ServletConfig config = getServletConfig();
		// 初期化パラメータ取得
		message = config.getInitParameter("message");
	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		PrintWriter pw = resp.getWriter();
		pw.println(message);

	}
}

web.xmlからフィルタの初期化パラメータを読み込む

<filter>
		<filter-name>param-filter</filter-name>
		<filter-class>chapter19.ParamFilter</filter-class>

		<init-param>
			<param-name>message</param-name>
			<param-value>filter-init-param</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>param-filter</filter-name>
		<url-pattern>/chapter19/param-servlet</url-pattern>
	</filter-mapping>
public class ParamFilter implements Filter {

	private String message;

	@Override
	public void destroy() {


	}

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {

		PrintWriter pw = arg1.getWriter();
		pw.println(message);
		arg2.doFilter(arg0, arg1);

	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {

		// 初期化パラメータの取得
		message = arg0.getInitParameter("message");

	}

}

web.xmlからコンテキストの初期化パラメータを読み込む

<context-param>
	<param-name>message</param-name>
	<param-value>context-param</param-value>
</context-param>
@WebServlet(urlPatterns={"/chapter19/param-context"})
public class ParamContext extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		PrintWriter pw = resp.getWriter();
		// 初期化パラメータの取得
		ServletContext context = getServletContext();
		pw.println(context.getInitParameter("message"));
	}
}

プロパティファイルの読み込み

プロパティファイル・・・キー=値の形式になっている行で構成されているテキストファイル。

debug = yes
memory = 1048576
network = 12.34.56.78

上記プロパティファイルは、WEB-INF/setting.txtに配置。

@WebServlet(urlPatterns={"/chapter19/file"})
public class File extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		PrintWriter pw = resp.getWriter();
		Page.header(pw);

		// ServletContextオブジェクトの取得
		ServletContext context = getServletContext();
		// サーバー上のパスを取得
		String path = context.getRealPath("/WEB-INF/setting.txt");

		FileInputStream in = new FileInputStream(path);
		Properties p = new Properties();
		p.load(in);
		in.close();

		for (String key : p.stringPropertyNames()) {
			pw.println("<p>" + key + ":" + p.getProperty(key) + "</p>");
		}

		Page.footer(pw);

	}

}

アプリケーション属性の設定

@WebServlet(urlPatterns={"/chapter19/attribute"})
public class Attribute extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		PrintWriter pw = resp.getWriter();
		Page.header(pw);

		// ServletContextオブジェクトの取得
		ServletContext context = getServletContext();
		// サーバー上のパスを取得
		String path = context.getRealPath("WEB-INF/setting.txt");

		FileInputStream in = new FileInputStream(path);
		Properties p = new Properties();
		p.load(in);
		in.close();

		for (String name : p.stringPropertyNames()) {
			// アプリケーション属性に設定
			context.setAttribute(name, p.getProperty(name));
		}

		Page.footer(pw);

	}

}
@WebServlet(urlPatterns={"/chapter19/attribute4"})
public class Attribute4 extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		PrintWriter pw = resp.getWriter();
		Page.header(pw);

		// ServletContextオブジェクトの取得
		ServletContext context = getServletContext();

		// アプリケーション属性名の一覧を取得
		List<String> list = Collections.list(context.getAttributeNames());
		for(String name : list) {
			pw.println("<p>" + name + ":");
			// アプリケーション属性名に対応する値を取得
			pw.println(context.getAttribute(name));
			pw.println("</p>");
		}

		Page.footer(pw);

	}

}