サーブレットで処理を書くのは簡単ですが、HTMLを書くには不便です。
JSPでHTMLを書くのは簡単ですが、処理を書くには不便です。
これを両立するためには、サーブレットとJSPの両方を使います。
サーブレットでブラウザから受信。サーブレット内で、処理を実施。
サーブレットで処理が終わったら、JSPに値を渡して、JSPでブラウザに応答すると、処理とデザインを分離できます。
サーブレットでの処理後、JSPを呼び出すことを「JSPへフォワードする」と呼びます。
Youtube版はこちらからどうぞ
Youtubeで動画を公開しました。こちらもぜひぜひ。
こちらでは、もう少し細かく解説してます。
サーブレットからJSPへフォワードするサンプル
ブラウザから受信した変数と足し算した結果を、ブラウザに応答します。
ForwardTestServlet.java
サーブレットで、ブラウザから受信した変数x,yを足し算。
JSPに計算結果zを渡すため、リクエストに計算結果をセットします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ForwardTestServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int x = Integer.parseInt(request.getParameter("x")); int y = Integer.parseInt(request.getParameter("y")); int z = x + y; request.setAttribute("z", z); getServletContext().getRequestDispatcher("/WEB-INF/jsp/forward.jsp").forward(request, response); } } |
forward.jsp
ブラウザから受信した変数x,yと、サーブレットで計算した値zを取得。ブラウザに応答します。
1 2 3 4 5 6 7 8 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <body> x:<%= request.getParameter("x") %><br> y:<%= request.getParameter("y") %><br> z:<%= request.getAttribute("z") %><br> </body> </html> |
実行結果
x=1,y=2をブラウザより渡します。
このx,yをもとに、サーブレットで足し算を実施。JSPに計算結果(z)を渡します。
JSPは、ブラウザにx,y,zの各値を返します。
サンプルの解説
サーブレットからJSPへのフォワード
サーブレットからJSPへのフォワードは、次の行で行っています。
「getServletContext().getRequestDispatcher(String).forward(request, response)」
これは、もちろん次のように分けて書いても構いません。
1 2 3 | ServletContext ctx = getServletContext(); RequestDispatcher dispatcher = ctx.getRequestDispatcher("/WEB-INF/jsp/forward.jsp"); dispatcher.forward(request, response); |
サーブレットからJSPへ値を渡す
HttpServletRequest#setAttribute(String,Object)は、そのリクエストが有効な間(ブラウザから受信して応答するまで)、値を保持してくれます。
これを使って、サーブレットで処理した結果を覚えておき、JSP側でHttpServletRequest#getAttribute(String)で値を取得することで、サーブレットとJSPで値を引き継いで処理を続けることできます。
別のサーブレットやJSPへリダイレクトするする方法は・・?
別のサーブレットやJSPへリダイレクトするする方法は、こちらを見てください。