トッカンソフトウェア

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


ページのトップへ戻る