Sessionを使ったサーブレット・JSP間のオブジェクト共有

JSPサーブレットには異なるページ間でオブジェクトを共有するために、スコープと呼ばれる領域が用意されています。サーブレットではrequest, session, applicationスコープがこれに対応します。

今回はsessionスコープを使ったサンプルを示します。プログラムの概要はHTML入力フォームのログイン画面でユーザー名とパスワードを入力し、サーブレットでその値を受取、ログインの有無の判断結果をJSPで示すというものです。

certification.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>ログイン画面</title>
</head>
<body>
	ユーザー名とパスワードを入れてログインして下さい。
	<FORM action="CertificationExcerciseServlet" method="post">
		ユーザー名:<INPUT type="text" name="userName"><BR/>
		パスワード:<INPUT type="password" name="password"><BR/>
		<INPUT type="submit" value="ログイン">
	</FORM>
</body>
</html>

CertificationExerciseServlet.java
ポイント

  • getServletContext()してServletContextを作っていることに注意。
  • forward(フォワード先のURL)メソッド。この時のURLはスラッシュ/から始めます。
  • RequestDispatcher でJSP、HTMLファイルへと反映させます。
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class CertificationExcerciseServlet
 */
public class CertificationExcerciseServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public CertificationExcerciseServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
		// TODO Auto-generated method stub
		HttpSession session = request.getSession(true);
		request.setCharacterEncoding("Windows-31J");

		String name = request.getParameter("userName");
		String password = request.getParameter("password");
		ServletContext sc = getServletContext();
		String forward = null;

		if("sample".equals(name) && "samplepass".equals(password)){
			session.setAttribute("isLogin", true);
			forward = "/certificationExerciseJSP.jsp";

		}
		else{
			forward = "/certification.html";
		}
		RequestDispatcher rd = sc.getRequestDispatcher(forward);
		rd.forward(request, response);


	}

}

certificationExerciseJSP.jsp

  • ここでのidはサーブレット内でsetAttributeしたものです。
  • scopeは当然session。
<%@ page language="java" contentType="text/html; charset=windows-31j"
    pageEncoding="windows-31j"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<jsp:useBean id="isLogin" scope="session" type="java.lang.Boolean"/>
<% if(isLogin != true) { %>
	<jsp:forward page="certification.html"/>
<% } %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>認証後の画面</title>
</head>
<body>
ログイン成功です。
</body>
</html>