「Java/Tomcat/サーブレットからJSPに遷移するサンプル」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
* ■サーブレットから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");}}
#inc(Java/Tomcat/サンプル)
* コメント
#pcomment(reply)
* ■サーブレットから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");}}
* 他のTomcatサンプル
#inc(Java/Tomcat/サンプル)
* コメント
#pcomment(reply)