■サーブレットから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のマッピングを追加してください。
<%@ 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");
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サンプル
コメント
最終更新:2013年03月24日 00:44