1. 程式人生 > >servlet相關知識,使用servlet實現定時重新整理,實現頁面登入次數統計

servlet相關知識,使用servlet實現定時重新整理,實現頁面登入次數統計

1、servlet: 動態的web開發技術,本質就是一個類,執行在伺服器端的一個java小程式;

作用:處理業務邏輯,生成動態web內容

2、接受引數:  格式:key=value
    Sting value=request.getParameter("key")

回寫內容:
    response
    response.getWriter().print("success");
    處理響應資料中文亂碼:
        resp.setContentType("text/html;charset=utf-8"); //建議大家放在方法中的第一行

3、servlet生命週期 ★★★
    void init(ServletConfig config):初始化
     * 初始化方法
     * 執行者:伺服器
     * 執行次數:一次
     * 執行時機:預設第一次訪問的時候
    void service(ServletRequest request,ServletResponse response):服務 處理業務邏輯
     * 服務
     * 執行者:伺服器
     * 執行次數:請求一次執行一次
     * 執行時機:請求來的時候
    void destroy():銷燬
     * 銷燬
     * 執行者:伺服器
     * 執行次數:只執行一次
     * 執行時機:當servlet被移除的時候或者伺服器正常關閉的時候
    
     serlvet是單例項多執行緒
     預設第一次訪問的時候,伺服器建立servlet,並呼叫init實現初始化操作.並呼叫一次service方法
     每當請求來的時候,伺服器建立一個執行緒,呼叫service方法執行自己的業務邏輯
     當serlvet被移除的時候伺服器正常關閉的時候,伺服器呼叫servlet的destroy方法實現銷燬操作.

4、url-pattern的配置:★
    方式1:完全匹配  必須以"/"開始 例如: /hello /a/b/c
    方式2:目錄匹配  必須"/"開始  以"*"結束   例如: /a/*  /*
    方式3:字尾名匹配 以"*"開始 以字元結尾 例如: *.jsp  *.do  *.action

優先順序:
        完全匹配>目錄匹配>字尾名匹配

案例:實現登入失敗時:3秒之後自動跳轉至其他頁面以及登入次數統計

loginservlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//0.設定編碼
		response.setContentType("text/html;charset=utf-8");
		
		//1.接受使用者名稱和密碼
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		
		//2.呼叫userservice 裡的login(username,password) 返回值:User user
		User user = null;
		try {
			user = new UserService().login(username,password);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("網路異常,請稍後再試!");
		}
		
		//3.判斷user是否為空
		if(user==null){
			//3.1若為空 寫"使用者名稱和密碼不匹配"
			response.getWriter().print("使用者名稱和密碼不匹配,3秒之後跳轉");
			//案例2-定時跳轉
			response.setHeader("refresh", "3;url=/day0902/login.htm");
			
		}else{
			//3.2若不為空 寫"xxx:歡迎回來"
			response.getWriter().print(user.getUsername()+":歡迎回來");
			
			//4.獲取全域性管理者
			ServletContext context = this.getServletContext();
			
			//5.獲取總次數
			Integer cishu = (Integer) context.getAttribute("count");
			
			//6.將次數+1
			cishu++;
			
			//7.將次數再次放入域物件中
			context.setAttribute("count", cishu);
			
		}
	}
}

showservlet程式碼:
public class ShowServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//0.設定編碼
		response.setContentType("text/html;charset=utf-8");
		
		//1.獲取全域性管理者
		ServletContext context = this.getServletContext();
		
		//2.獲取登入的次數
		Integer cishu=(Integer) context.getAttribute("count");
		
		//3.在頁面上列印總次數
		response.getWriter().print("登入成功的總次數為:"+cishu);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}