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");
}
}
ページのトップへ戻る