読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

セッションとかスコープとか。

JavaEE
<スポンサーリンク>

HTTPにおける処理はステートレスである。
ステートレスというのは、リクエストによってコネクションが確立し、レスポンスを返した後にはコネクションが切断されてしまうことで、リクエストされたときの状態は保持されない。

HTTPでステートレスなプロトコルを使用しつつ、ステートフルな状態を可能にするためには、セッションを管理する必要がある。
■サーバ側の処理
クライアントを一意に識別できるIDを生成する。

■クライアントの処理
WebブラウザがIDを保持する。
リクエストする際にIDを一緒に送信することで、サーバとステートフルな状態を作り出すことができる。

セッションオブジェクトを取得する。

HttpSession getSession()
→このリクエストに関連付けられている現在のセッションを返す
リクエストがセッションを持たない場合は新規にセッションを生成する。

HttpSession getSession(boolean create)
→このリクエストに関連付けられている現在のセッションを返す
リクエストに関連付けられているセッションが存在せず、かつ引数がtrueのときは新しいセッションを返す。

package session;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class SessionCheck extends HttpServlet {
	public void doGet(HttpServletRequest req, HttpServletResponse res)
						throws ServletException, IOException {
		//既存のセッションオブジェクトを返す
		HttpSession session = req.getSession(false);
		
		//既存のセッションオブジェクトが存在しない場合は、新しいセッションを返す
		if (session == null) {
			session = req.getSession(true);
		}
		
		PrintWriter out = res.getWriter();
		out.println("<html>");
		out.println("<body>");
		out.println("Session Check!");
		out.println("</br>");
		out.println("session ID :" + session.getId());
		out.println("<a href=\"/kiso/SessionCheck2\">click</a>");
		out.println("</body>");
		out.println("</html>");
		
	}

}

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
   <servlet>
        <servlet-name>SessionCheck</servlet-name>
        <servlet-class>session.SessionCheck</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>SessionCheck</servlet-name>
        <url-pattern>/SessionCheck</url-pattern>
    </servlet-mapping>
    
    <servlet>
        <servlet-name>SessionCheck2</servlet-name>
        <servlet-class>session.SessionCheck2</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>SessionCheck2</servlet-name>
        <url-pattern>/SessionCheck2</url-pattern>
    </servlet-mapping>
</web-app>
    

スコープって何?

スコープとは、サーブレットJSPから参照可能な有効範囲や寿命を表す。
・pageスコープ
pageスコープはJSPのみが使用できるスコープ。
そのJSPページの中でだけ情報を保持できる。

・requestスコープ
requestスコープはレスポンスが返されるまでクライアント情報を保持できるスコープのこと。
リクエストを受け取ったサーブレットが格納した情報は、リクエストの転送先のサーブレットJSPもアクセスすることができる。

・sessionスコープ
sessionスコープはレスポンスを返しても消滅しない。
セッションタイムアウトか明示的に破棄されるまでクライアント情報を保持する。

・applicationスコープ
applicationスコープで保持する情報はすべてのクライアントで共有される。
この情報はサーバを停止させない限りは消滅しない。

読んだ本

SUN教科書 Webコンポーネントディベロッパ(SJC-WC) 試験番号:310-083

SUN教科書 Webコンポーネントディベロッパ(SJC-WC) 試験番号:310-083

感謝のプログラミング

今回で感謝のプログラミングは【430時間目】
10000時間まで、あと【9570時間】

Node.jsの勉強もしたので、それを含めておく。