1. 程式人生 > >java深入探究06

java深入探究06

定義 auth ttr null hist context 編號 http 使用

Tomcat中獲取資源文件:

ServletContext().getRealPath(/WEB-INF/classes/db.properties);//獲取資源文件的在服務器中的絕對路徑

ServletContext()getResourceAsStream() 得到資源文件,返回的是輸入流

ServletContext().getRealPath

會話管理

  1.定義:管理瀏覽器和服務器間會話期間產生的會話數據

  2.域對象:實現資源之間數據的共享

  3.會話數據

    a) Cookie:會話數據保存在瀏覽器客戶端

    1. 使用流程:

        1.Cookie對象在服務端被創建

new Cookie(name,value,)->

        2.發送到客戶端 respond.addCookie(cookie)(這裏隱式發了一個set-Cookie的響應頭set-Cookie:name=value)->

        3.瀏覽器得到這個Cookie會保存起來下次訪問服務器時會帶著Cookie信息(隱式帶著一個Cookie:name=value的請求頭)->

        4.服務器獲得瀏覽器發來的Cookie對象request.getCookies()

    1.  主要方法

        構造:Cookie(String ,value);

        設置:

setMaxAge(int expiry)//設置cookie的有效時間

          setValue(String newValue);//設置新的Cookie

           setPath(String path);//設置有效的訪問路徑

        發生:addCookie(cookie);

        服務端接受:request.getCookies();

    1. 註意:

        Cookie只能保存非中文字符串類型,可以保存多個多個Cookie,一個瀏覽器可以保存300Cookie,每個站點只能存20個,每個Cookie大小限制4kb;

        setMaxAge(int expiry):正數:保存在瀏覽器客戶端硬盤時間;

       負數:保存在瀏覽器內存中,關閉瀏覽器就沒有了

        零:刪除同名的Cookie數據

    1.  例子:保存用戶上次訪問的時間
技術分享
/**

 * 案例-用戶上次訪問時間

 * @author APPle

 *

 */

public class HistServlet extends HttpServlet {

 

/**

 *

 */

private static final long serialVersionUID = 1L;

 

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

 

//獲取當前時間

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

String curTime = format.format(new Date());

 

 

//取得cookie

Cookie[] cookies = request.getCookies();

String lastTime = null;

if(cookies!=null){

for (Cookie cookie : cookies) {

if(cookie.getName().equals("lastTime")){

//有lastTime的cookie,已經是第n次訪問

lastTime = cookie.getValue();//上次訪問的時間

//第n次訪問

//1.把上次顯示時間顯示到瀏覽器

response.getWriter().write("歡迎回來,你上次訪問的時間為:"+lastTime+",當前時間為:"+curTime);

//2.更新cookie

cookie.setValue(curTime);

cookie.setMaxAge(1*30*24*60*60);

//3.把更新後的cookie發送到瀏覽器

response.addCookie(cookie);

break;

}

}

}

 

/**

 * 第一次訪問(沒有cookie 或 有cookie,但沒有名為lastTime的cookie)

 */

if(cookies==null || lastTime==null){

//1.顯示當前時間到瀏覽器

response.getWriter().write("你是首次訪問本網站,當前時間為:"+curTime);

//2.創建Cookie對象

Cookie cookie = new Cookie("lastTime",curTime);

cookie.setMaxAge(1*30*24*60*60);//保存一個月

//3.把cookie發送到瀏覽器保存

response.addCookie(cookie);

}

}

 

}
View Code

b) Session:會話數據保存在服務端

  1. 出現原因:

    a) Cookie有自己缺點,最大4kb,只能非中文限制多,Session就能解決這個問題,可以存對象,任何類型數據

    b) 服務器能夠識別不同瀏覽器,數據存到哪個域就必須從那個域中或獲得對象

  1. 使用流程:

    不同的瀏覽器request對象獲得不同的域對象

    HttpSession session=request.getSession();只要解析他的流程就可以了

      a) 第一次一個瀏覽器創建Session域對象,服務器給這個session對象分配了一個JSESSIONID對象,用來唯一標識這個session對象的-

      b) 再將這個JSESSIONID發送到客戶端respond.addCookie("JSESSIONID", sessionID)->

      c) 之後瀏覽器發送請求到服務器帶著JSESSIONID請求頭從服務器中找配備的session對象-

      d) 找到了就獲得這個對象沒有找到就重復a)

  1. 主要方法

     a) 創建:request.getSession([true]);

     b) 設置:setMaxInactiveInterval(int interval)//設置保存時間

         Invalidate();//銷毀這個session對象

         getId();//獲得這個Session的唯一標識JSESSIONID

  1. 註意:

     a) 銷毀時間設置:默認情況30min,setMaxInactiveInterval(int interval);設置時間;全局設置銷毀時間可以在web.xml中配置

      <!-- 修改session全局有效時間:分鐘 -->

      <session-config>

      <session-timeout>1</session-timeout>

      </session-config>

      ;手動銷毀:invalidate()

    b) 如何避免瀏覽器的JSESSIONIDcookie隨著瀏覽器關閉而丟失的問題

      手動設置瀏覽器的Cookie時間

      Cookie cookie=new Cookie();

      cookie.setMaxAge(60*60);

      response.addCookie(cookie);

  1. 例子:
技術分享
//1.得到session對象

HttpSession session = request.getSession(false);

 

if(session==null){

System.out.println("沒有找到對應的sessino對象");

return;

}

 

/**

 * 得到session編號

 */

System.out.println("id="+session.getId());

 

//2.取出數據

String name = (String)session.getAttribute("name");

System.out.println("name="+name);
View Code

java深入探究06