トッカンソフトウェア

EclipseでJsp、Servlet作成(web.xml)

前回はweb.xmlなしでJsp、Servlet作成を作成しましたが、今回はweb.xmlありで作ってみます。

前回の続きからやるので、先にそちらで環境、ソースを用意して下さい。

web.xmlの作成

EclipseのWebプロジェクトでDeployment Descriptor を右クリックし、Generate Deploymennt Descriptor Stubを選択します。


WEB-INFの下にweb.xmlが作成されます。


web.xmlにservletとservlet-mappingを追加します。

servletでJavaクラスの位置(servlet-class)を定義し、servlet-mappingでURL(servlet-mapping)を定義します。
servletとservlet-mappingはservlet-nameで紐付けます。

web.xml
				
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	version="3.1">
	<display-name>test</display-name>

	<servlet>
		<servlet-name>hello</servlet-name>
		<servlet-class>test.TestP</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>hello</servlet-name>
		<url-pattern>/TestP</url-pattern>
	</servlet-mapping>
</web-app>

			

TestP.javaのアノテーションでURLマッピングを定義している箇所をコメントアウトします。

TestP.java
				
package test;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//@WebServlet("/TestP")
public class TestP extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public TestP() {
		super();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 呼び出し元Jspからデータ受け取り
		request.setCharacterEncoding("UTF8");
		String jsp = request.getParameter("fromJsp");

		// 呼び出し先Jspに渡すデータセット
		request.setAttribute("fromServlet", jsp + " + サーブレットで追加");

		// result.jsp にページ遷移
		RequestDispatcher dispatch = request.getRequestDispatcher("result.jsp");
		dispatch.forward(request, response);
	}
}

			
Tomcatを再起動すると、前回と同じように動作するのを確認でます。


web.xmlにフィルターを追加

web.xmlにフィルターを登録してみます。フィルター自体はこちらを参考にして下さい。

web.xml
				
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	version="3.1">
	<display-name>test</display-name>

	<servlet>
		<servlet-name>hello</servlet-name>
		<servlet-class>test.TestP</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>hello</servlet-name>
		<url-pattern>/TestP</url-pattern>
	</servlet-mapping>

	<filter>
		<filter-name>filter</filter-name>
		<filter-class>test.TestP</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>filter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

			
Servletにもフィルターインターフェイスを継承し、メソッドを追加します。

TestP.java
				
package test;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//@WebServlet("/TestP")
public class TestP extends HttpServlet implements Filter {
	private static final long serialVersionUID = 1L;

	public TestP() {
		super();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 呼び出し元Jspからデータ受け取り
		request.setCharacterEncoding("UTF8");
		String jsp = request.getParameter("fromJsp");

		// 呼び出し先Jspに渡すデータセット
		request.setAttribute("fromServlet", jsp + " + サーブレットで追加");

		// result.jsp にページ遷移
		RequestDispatcher dispatch = request.getRequestDispatcher("result.jsp");
		dispatch.forward(request, response);
	}

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
			throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) arg0;
		String uri = req.getRequestURI();
		String method = req.getMethod();

		System.out.println("アクセス:" + uri + ":" + method);

		// サーブレットの実行
		arg2.doFilter(arg0, arg1);
	}

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

			

web.xmlにリスナーを追加

web.xmlにリスナーを登録してみます。リスナー自体はこちらを参考にして下さい。

web.xml
				
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	version="3.1">
	<display-name>test</display-name>

	<servlet>
		<servlet-name>hello</servlet-name>
		<servlet-class>test.TestP</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>hello</servlet-name>
		<url-pattern>/TestP</url-pattern>
	</servlet-mapping>

	<listener>
		<listener-class>test.TestP</listener-class>
	</listener>
</web-app>

			
Servletにもリスナーのインターフェイスを継承し、メソッドを追加します。

TestP.java
				
package test;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//@WebServlet("/TestP")
public class TestP extends HttpServlet implements ServletContextListener {
	private static final long serialVersionUID = 1L;

	public TestP() {
		super();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 呼び出し元Jspからデータ受け取り
		request.setCharacterEncoding("UTF8");
		String jsp = request.getParameter("fromJsp");

		// 呼び出し先Jspに渡すデータセット
		request.setAttribute("fromServlet", jsp + " + サーブレットで追加");

		// result.jsp にページ遷移
		RequestDispatcher dispatch = request.getRequestDispatcher("result.jsp");
		dispatch.forward(request, response);
	}

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		System.out.println("contextDestroyed");
	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		System.out.println("contextInitialized");
	}
}

			



ページのトップへ戻る