「Java/Tomcat/サーブレットからJSPに遷移するサンプル」の編集履歴(バックアップ)一覧に戻る

Java/Tomcat/サーブレットからJSPに遷移するサンプル - (2013/03/24 (日) 00:42:39) のソース

* ■サーブレットからJSPに遷移(処理を移す)するサンプル &ref(GotoJsp.java)
#highlight(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
#highlight(){{
  <!-- サーブレットの宣言 -->
  <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のマッピングを追加してください。

* ■&ref(first.jsp)
#highlight(){{
<%@ 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に遷移
「http://localhost/Tomcat7Test/gotojsp?type=jsp」にアクセス
- 遷移先のURLを指定して、HttpServletRequestからリクエストディスパッチャーを取得します。
- URLはwebアプリケーションのルートから、もしくは相対パスを指定出来ます。
#highlight(java) {{
RequestDispatcher disp = req.getRequestDispatcher("/jsp/first.jsp");}}
- forwardメソッドでJSPに遷移します。
#highlight(java) {{
disp.forward(req, resp);}}

** 2.JSPに遷移その2
「http://localhost/Tomcat7Test/gotojsp?type=jsp2」にアクセス
- HttpServletContextからもリクエストディスパッチャーを取得出来ます。こちらは相対パスは使えません。
#highlight(java) {{
RequestDispatcher disp = getServletContext().getRequestDispatcher("/jsp/first.jsp");
disp.forward(req, resp);}}

** 3.画像ファイル等静的ファイルに遷移
「http://localhost/Tomcat7Test/gotojsp?type=img」にアクセス
- 遷移先が画像ファイルだと、ブラウザに画像が表示されます。
- 画像の他に、csvファイルや圧縮ファイル、htmlファイルでも構いません。
#highlight(java) {{
RequestDispatcher disp = req.getRequestDispatcher("/img/1179_64.png");
disp.forward(req, resp);}}

** 4.サーブレットからサーブレットへの遷移
「http://localhost/Tomcat7Test/gotojsp?type=srv」にアクセス
- URLにサーブレットへのURLを指定するだけです。
- その気になればサーブレットから サーブレットへの無限ループも作れます。
#highlight(java) {{
RequestDispatcher disp = req.getRequestDispatcher("/myservlet");
disp.forward(req, resp);}}

** 5.サーブレットからサーブレットへの遷移その2
「http://localhost/Tomcat7Test/gotojsp?type=srv2」にアクセス
- サーブレットへの遷移は、HttpServletContext.getNamedDispatcherも利用可能です。
- web.xmlで指定したサーブレットの名前で遷移先を取得します。
#highlight(java) {{
RequestDispatcher disp = getServletContext().getNamedDispatcher("myServlet");
disp.forward(req, resp);}}

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

* コメント
#pcomment(reply)