天天看點

JavaWeb - 應用篇

一、Web實作登入注冊功能

1、效果圖

JavaWeb - 應用篇

JavaWeb - 應用篇

2、結構圖

JavaWeb - 應用篇

3、關鍵詞

  - Cookie

  - UploadFile(位元組流操作)

  - InitServlet(自啟動)(<load-on-startup>)

  - multipart/form-data + post 擷取步驟

  - UUID

4、下載下傳位址

​​點選進入下載下傳頁面​​

二、Web實作唯一登入功能(過濾器 + 監聽器 + 單例模式)

1、項目分析圖

JavaWeb - 應用篇
JavaWeb - 應用篇
JavaWeb - 應用篇
JavaWeb - 應用篇
JavaWeb - 應用篇
JavaWeb - 應用篇
JavaWeb - 應用篇
JavaWeb - 應用篇
JavaWeb - 應用篇

Ps:必須使用兩個不同的浏覽器,否則session是一樣的,檢測不出效果。

2、核心代碼

package com.imooc.listener;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import com.imooc.cache.LoginCache;

/**
 * 使用者登入監聽器
 * @author lv
 *
 */
public class LoginSessionListener implements HttpSessionAttributeListener {
  
  private static final String LOGIN_USER="loginUser";

  @Override
  public void attributeAdded(HttpSessionBindingEvent hsbe) {
    String attrName = hsbe.getName();//監聽到session屬性值發生添加操作,擷取對應操作的屬性名
    
    if(LOGIN_USER.equals(attrName)){//若屬性名為登入屬性名,判定為使用者登入操作
      String attrVal = (String)hsbe.getValue();//擷取添加的屬性值,即使用者登入名
      HttpSession session = hsbe.getSession();//該次操作的session對象
      String sessionId = session.getId();//該次操作的session對象ID
      
      String sessionId2 = LoginCache.getInstance().getSessionIdByUsername(attrVal);//從緩存對象裡面,獲得該使用者登入名對應的sessionID值
      if(null == sessionId2){//未獲得結果,不需要清理前次登入使用者會話資訊
        
      }else{
        HttpSession session2 = LoginCache.getInstance().getSessionBySessionId(sessionId2);//擷取前次該使用者登入對應的session對象
        session2.invalidate();//清理前次登入使用者會話存儲資訊,使得前次登入失效
      }
      
      //完成該次登入使用者登入名、sessionID,session對象的緩存對象存儲
      LoginCache.getInstance().setSessionIdByUserName(attrVal, sessionId);
      LoginCache.getInstance().setSessionBySessionId(sessionId, session);
    }
  }

  @Override
  public void attributeRemoved(HttpSessionBindingEvent arg0) {
  }

  @Override
  public void attributeReplaced(HttpSessionBindingEvent arg0) {
  }
}      

Ps:使用sessionAttr監聽器而不是用session監聽器,因為隻是建立session監聽是毫無意義的,比如:進入到登入頁面,但可能沒有登入,但是監聽功能已經啟動了。 

package com.imooc.cache;

import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;

/**
 * 登入使用者與session緩存對象
 * @author lv
 *
 */
public class LoginCache {
  private static LoginCache instance = new LoginCache();
  
  private Map<String,String> loginUserSession = new HashMap<String,String>();// key值:登入使用者登入名,value值:登入使用者sessionId
  private Map<String,HttpSession> loginSession = new HashMap<String,HttpSession>();//key值:登入使用者sessionId,value值:登入使用者session對象
  
  private LoginCache(){
    
  }
  
  public static LoginCache getInstance(){
    return instance;
  }
  
  /**
   * 通過登入名擷取對應登入使用者的sessionId
   * @param username
   * @return
   */
  public String getSessionIdByUsername(String username){
    return loginUserSession.get(username);
  }
  
  /**
   * 通過sessionId擷取對應的session對象
   * @param sessionId
   * @return
   */
  public HttpSession getSessionBySessionId(String sessionId){
    return loginSession.get(sessionId);
  }
  
  /**
   * 存儲登入名與對應的登入sessionID至緩存對象
   * @param username
   * @param sessionId
   */
  public void setSessionIdByUserName(String username,String sessionId){
    loginUserSession.put(username, sessionId);
  }
  
  /**
   * 存儲sessionId與對應的session對象至緩存對象
   * @param sessionId
   * @param session
   */
  public void setSessionBySessionId(String sessionId,HttpSession session){
    loginSession.put(sessionId, session);
  }
}      

3、下載下傳位址

​​點選進入下載下傳頁面​​

三、購物車 + 收藏 + 浏覽記錄 + 分頁 + 模糊查詢(附:404、500、編碼過濾)

1、效果圖

JavaWeb - 應用篇

JavaWeb - 應用篇

JavaWeb - 應用篇

JavaWeb - 應用篇

JavaWeb - 應用篇

JavaWeb - 應用篇

2、結構圖

JavaWeb - 應用篇

3、技術介紹

JavaWeb - 應用篇

4、子產品說明

  1、購物車

        - 課程清單顯示

        - 加入購物車、加入收藏

        - 購物車清單顯示及删除、計算

        - 收藏清單顯示及删除

  2、進入應用第一頁

        - welcome-file-list

        - index.jsp

        - 跳轉到課程清單頁

  3、課程清單頁

        - jsp課程清單展現

        - Servlet、LocalCache實作

  4、購物車操作

        - 加入購物車

        - 購物車清單展現

        - 删除購物車記錄

        - 購物車模拟結算

  5、收藏及操作

        - 加入收藏

        - 收藏清單展現

        - 删除收藏記錄

  6、浏覽記錄及操作

        - 課程詳情

        - 加入浏覽記錄

        - 檢視浏覽記錄

        - 删除浏覽記錄

  7、其他功能

        - 課程分頁

5、下載下傳位址