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); } }