ServletからJsp(Html)呼び出し(データ渡し)
Servletを呼び出した後、次のページに遷移するには2つの方法があります。forward | : | 同じサーバにページ遷移する場合に使用。ページ間でデータを引き継げる |
redirect | : | 別サーバにページ遷移する場合に使用。ページ間でデータを引き継げない |
forward
forwardからいきます■サンプル:呼び出し元のJsp
test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ServletのPost</title>
</head>
<body>
<form action="<%=request.getContextPath()%>/TestP" method="post">
Postで送信
<br />
<input type="text" name="fromJsp" value="Jspでセット" />
<br />
<input type="submit" value="実行" />
</form>
</body>
</html>
ブラウザ表示
■サンプル:呼び出し先のServlet(forward版)
TestP.java
package test;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/TestP")
public class TestP extends HttpServlet {
private static final long serialVersionUID = 1L;
public TestP() {
super();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 呼び出し元Jspからデータ受け取り
request.setCharacterEncoding("UTF8");
String jsp = request.getParameter("fromJsp");
// 呼び出し先Jspに渡すデータセット
request.setAttribute("fromServlet", jsp + " + サーブレットで追加");
// result.jsp にページ遷移
RequestDispatcher dispatch = request.getRequestDispatcher("result.jsp");
dispatch.forward(request, response);
}
}
■サンプル:Servletから呼び出されるJsp
result.jsp
<%@ page language="java" contentType="text/html; charset=UTF8"
pageEncoding="UTF8"%>
<%
// Servletのデータ受け取り
request.setCharacterEncoding("UTF8");
String strServlet = (String) request.getAttribute("fromServlet");
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF8">
<title>PAGE</title>
</head>
<body>
Servletでセットしたデータを表示 :
<%=strServlet%>
</body>
</html>
ブラウザ表示
redirect
次にredirectをやりますhtml、Jspはforward版から変更せず、Servletだけ変更しました。
■サンプル:呼び出し先のServlet(redirect版)
TestP.java
package test;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/TestP")
public class TestP extends HttpServlet {
private static final long serialVersionUID = 1L;
public TestP() {
super();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 呼び出し元Jspからデータ受け取り
request.setCharacterEncoding("UTF8");
String jsp = request.getParameter("fromJsp");
// 呼び出し先Jspに渡すデータセット → redirectの場合、データはJspに渡せません
request.setAttribute("fromServlet", jsp + " + サーブレットで追加");
// result.jsp にページ遷移
response.sendRedirect("result.jsp");
}
}
ブラウザ表示
redirectはServletからデータを受け取れません。
getParameterとgetAttribute
Jsp→Servletの連携でServlet側でJspから送られた値を取得するのが、HttpServletRequest.getParameterで、Servlet→Jspの連携でJsp側でServletでセット(setAttribute)された値を取得するのがRequest.getAttributeになります。
Jsp | Servlet | |
---|---|---|
Formの入力項目 | → | getParameter |
~色々な処理~ | ||
getAttribute | ← | setAttribute |
ページのトップへ戻る