■サーブレットからJSPに遷移(処理を移す)するサンプル #ref error : ファイルが見つかりません (GotoJsp.java)

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
public class GotoJspServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
      IOException {
 
    String type = req.getParameter("type");
    if ("jsp".equals(type)) {
      // 1.JSPに遷移
      // 遷移先のURLを指定して、HttpServletRequestからリクエストディスパッチャーを取得します。
      // URLはwebアプリケーションのルートから、もしくは相対パスを指定出来ます。
      RequestDispatcher disp = req.getRequestDispatcher("/jsp/first.jsp");
      // forwardメソッドでJSPに遷移します。
      disp.forward(req, resp);
    } else if ("jsp2".equals(type)) {
      // 2.JSPに遷移その2
      // HttpServletContextからもリクエストディスパッチャーを取得出来ます。こちらは相対パスは使えません。
      RequestDispatcher disp = getServletContext().getRequestDispatcher("/jsp/first.jsp");
      disp.forward(req, resp);
    } else if ("img".equals(type)) {
      // 3.画像ファイル等静的ファイルに遷移
      // 遷移先が画像ファイルだと、ブラウザに画像が表示されます。
      // 画像の他に、csvファイルや圧縮ファイル、htmlファイルでも構いません。
      RequestDispatcher disp = req.getRequestDispatcher("/img/1179_64.png");
      disp.forward(req, resp);
    } else if ("srv".equals(type)) {
      // 4.サーブレットからサーブレットへの遷移
      // その気になればサーブレットから サーブレットへの無限ループも作れます。
      RequestDispatcher disp = req.getRequestDispatcher("/myservlet");
      disp.forward(req, resp);
    } else if ("srv2".equals(type)) {
      // 5.サーブレットからサーブレットへの遷移その2
      // サーブレットへの遷移は、HttpServletContext.getNamedDispatcherも利用可能です。
      // web.xmlで指定したサーブレットの名前で遷移先を取得します。
      RequestDispatcher disp = getServletContext().getNamedDispatcher("myServlet");
      disp.forward(req, resp);
    } else {
      // 6.sendRedirect
      // sendRedirectはブラウザに遷移先のURLを返して、ブラウザの機能で遷移式のURLにアクセスを促します。
      // sendRedirectでは、webアプリケーションのルートからURLを指定することは出来ません。
      // サーバのルート、相対URL、httpから始まる完全なURLを指定します。
      resp.sendRedirect("/Tomcat7Test/jsp/first.jsp");
    }
  }
}
 
  • ごちゃごちゃ色々書いてありますが、バラメータ「type」によって色んな画面遷移(処理の移動)をしているだけのサンプルです。
  • サーブレットからJSPに遷移するには、まずリクエストディスパッチャーを取得して、forwardメソッドで遷移します。
  • 「forward」での遷移は、ブラウザには一切通知されず、webアプリケーション内部で完結します。
  • なので、ブラウザのアドレスバーは変化しません。
  • 遷移と言うと「画面遷移」のような移り変わりをイメージしますが、「forward」の場合でも使ってしまいます。
  • 「sendRedirect」だと、ブラウザに遷移先のURLを通知して、ブラウザの機能で遷移先にアクセスしてもらうので、アドレスバーもバッチリ変わります。

■web.xml

<!-- サーブレットの宣言 -->
  <servlet>
    <servlet-name>gotojsp</servlet-name>
    <servlet-class>GotoJspServlet</servlet-class>
  </servlet>
 
  <!-- サーブレットとurlのマッピング -->
  <servlet-mapping>
    <servlet-name>gotojsp</servlet-name>
    <url-pattern>/gotojsp</url-pattern>
  </servlet-mapping>
 
  • GotoJspServlet.javaを実行するには、web.xmlに上記のサーブレットの宣言と、urlのマッピングを追加してください。

first.jsp

<%@ page language="java" contentType="text/html; charset=UTF8" pageEncoding="UTF-8" %>
ハローJSP!!
 
  • なんの工夫もなく「ハローJSP!!」を表示するだけのJSPです。
  • 日本語を使っているので、文字化けしないように「page」ディレクティブで文字コードを指定しています。

■ファイルの配置

/Tomcat7Test
┣ WEB-INF
┃┣ src
┃┃┣ GotoServlet.java
┃┃┗ MyServlet.java
┃┗ web.xml
┣ img
┃┗1179_64.png
┗ jsp
 ┗ first.jsp
今回のサンプルに必要なファイルはこんな感じ。


■ブラウザで動作確認

1.JSPに遷移

  • 遷移先のURLを指定して、HttpServletRequestからリクエストディスパッチャーを取得します。
  • URLはwebアプリケーションのルートから、もしくは相対パスを指定出来ます。
RequestDispatcher disp = req.getRequestDispatcher("/jsp/first.jsp");
  • forwardメソッドでJSPに遷移します。
disp.forward(req, resp);

2.JSPに遷移その2

  • HttpServletContextからもリクエストディスパッチャーを取得出来ます。こちらは相対パスは使えません。
RequestDispatcher disp = getServletContext().getRequestDispatcher("/jsp/first.jsp");
disp.forward(req, resp);

3.画像ファイル等静的ファイルに遷移

  • 遷移先が画像ファイルだと、ブラウザに画像が表示されます。
  • 画像の他に、csvファイルや圧縮ファイル、htmlファイルでも構いません。
RequestDispatcher disp = req.getRequestDispatcher("/img/1179_64.png");
disp.forward(req, resp);

4.サーブレットからサーブレットへの遷移

  • URLにサーブレットへのURLを指定するだけです。
  • その気になればサーブレットから サーブレットへの無限ループも作れます。
RequestDispatcher disp = req.getRequestDispatcher("/myservlet");
disp.forward(req, resp);

5.サーブレットからサーブレットへの遷移その2

  • サーブレットへの遷移は、HttpServletContext.getNamedDispatcherも利用可能です。
  • web.xmlで指定したサーブレットの名前で遷移先を取得します。
RequestDispatcher disp = getServletContext().getNamedDispatcher("myServlet");
disp.forward(req, resp);

6.sendRedirect

  • sendRedirectはブラウザに遷移先のURLを返して、ブラウザの機能で遷移式のURLにアクセスを促します。
  • sendRedirectでは、webアプリケーションのルートからURLを指定することは出来ません。
  • サーバのルート、相対URL、httpから始まる完全なURLを指定します。
resp.sendRedirect("/Tomcat7Test/jsp/first.jsp");

他のTomcatサンプル


コメント

名前: