alphaのjava備忘録

alphaが勉強したことを書いていくブログ

サーブレット/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型変数 jspjspのパス("/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!"


実行結果
f:id:dream_of_night:20180707004440p:plain


ちなみにjsp2.jspはかなり省略しても一応表示される。きっとこのままだと問題があるやつだね、、、ページタイトルも入ってないし

<body>
This is jsp2 page!
</body>

実行結果
f:id:dream_of_night:20180707004701p:plain