サーブレット/JSPを連携するには
前回作成した動的Webプロジェクトに新規のサーブレットとJSPを加えて連携させてみる。初歩としてサーブレット(Servlet2.java)のdoGet()メソッドでJSP(jsp2.jsp)のページを表示する。
・JSP作成
「WebContent」-「WEB-INF」配下に「ファイル」タブ⇒「新規」⇒「その他」⇒「Web」⇒「JSPファイル」で作成。(jsp2.jsp)
・注意:サーブレットの変更後は「プロジェクト」タブ⇒「クリーン」をしないと変更が適応されないみたい。何回か404エラーが出たよ、、、JSPの変更では不要
Servlet2.java
package servletTest; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/Servlet2") public class Servlet2 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String jsp ="/WEB-INF/jsp2.jsp"; RequestDispatcher rd = request.getRequestDispatcher(jsp); rd.forward(request, response); } }
サーブレットからJSPへ移動させる(フォワード)にはforward()メソッドの使用が必要。
(1)String型変数 jsp に jspのパス("/WEB-INF/jsp2.jsp")を代入。
(なぜパスが/WEB-INFから始まるのかはよくわからない。メソッドの処理される場所からの相対パス?)
(2)RequestDispatcher インターフェイスを実装したオブジェクトrdを用意
(3)RequestDispatcher のオブジェクトを戻り値とするgetRequestDispatcher()を使用。引数はjspのパス。
(getRequestDispatcher()は引数に指定したリソースのラッパを返すらしい。)
(オブジェクトrequestはHttpServletRequest インターフェイスを介して ServletRequest を実装しており、getRequestDispatcher()が使用可能)
(4)RequestDispatcher 型のオブジェクトrdでforward()を使用。
jsp2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP2.jsp</title> </head> <body> This is jsp2 page! </body> </html>
(1)タイトルはJSP2.jsp
(2)ページ内容は"This is jsp2 page!"
実行結果
ちなみにjsp2.jspはかなり省略しても一応表示される。きっとこのままだと問題があるやつだね、、、ページタイトルも入ってないし
<body> This is jsp2 page! </body>
実行結果