1. 程式人生 > >JAVA基礎程式設計109——Servlet

JAVA基礎程式設計109——Servlet

tomcat伺服器

1. 目錄結構

  1. bin: 二進位制可執行檔案存放的目錄
  2. conf: 配置檔案存放的目錄
  3. webapps: 專案釋出目錄
  4. work: 工作目錄
  5. log: 日誌檔案存放目錄

2. tomcat釋出專案的三種方式

  1. 直接將web專案丟到webapps下 web war 專案名稱就是訪問專案的虛擬目錄 /web
  2. 修改 conf/server.xml 新增一個虛擬目錄
    
    <Context path=""  docBase=""  /> <Context path=""  docBase=""  /> 
    
    
  3. /conf/Catalina/localhost
    目錄下建立一個xml檔案,xml檔案的名稱就是虛擬目錄
    <?xml version="1.0" encoding="UTF-8"?>				 
    <Context  docBase=""  /> 
    
    

Servlet : 一個java小程式 web程式的入口

1. 建立Servlet

  1. 建立一個類實現Servlet介面
  2. 實現其中的方法
    servcie(ServletReuqest request,ServletResponse response) servcie(ServletReuqest request,ServletResponse response)
    inti
    () destroy()
    簡化方案: 建立一個類繼承 HttpServlet 類,重寫 doGet/doPost

2. 配置Servlet HelloServlet

  1. xml配置
    <servlet>
    	<serlvet-name>HelloServlet</servlet-name>
    	<servlet-class>com.itheima.servlet.HelloServlet</servlet-class>
    </servlet>			
    <servlet-mapping>
    	<serlvet-name
    >
    HelloServlet</servlet-name> <url-parttern>/helo</url-parttern> </servlet-mapping>

2. 註解配置

  • @WebServlet 替換web.xml中servlet的配置
  • value 配置訪問路徑
  • urlPatterns 配置訪問路徑

3. servlet訪問路徑的配置

  1. 完全匹配 /* 訪問路徑 和servlet的url-parttern配置完全一致的情況 url: http://localhost:8080/web/hello url-parttern : /hello
  2. 目錄匹配 /* /hello/* 訪問路徑 和servlet的url-parttern配置匹配一部分 url: http://localhost:8080/web/hello/abc url-parttern : /hello/*
  3. 副檔名匹配 *.html 訪問路徑的副檔名 和servlet的url-parttern配置匹配一部分 url: http: /localhost:8080/web/hello.html url-parttern : *.html

4. Servlet細節

  1. 生命週期

    1. 建立 : 預設使用者第一次訪問servlet的時候會建立servlet物件,執行其中init()方法完成初始化操作 執行一次
    2. 執行 : 每一次的使用者請求都會執行其中的service()方法
    3. 銷燬 : 伺服器關閉或者專案被移除了,銷燬servlet 執行destroy()方法,執行一次
  2. servlet體系結構

    1. Servlet介面
    2. GenericServlet 類
    3. HttpServlet 類
HTTP協議 : 規定了瀏覽器和伺服器互動的資料格式

1. 請求

  1. 請求行 : 請求方式 請求路徑 協議版本
  2. 請求頭 : key:value1,value2 referer: 請求的來源 User-Agent: 客戶機資訊
  3. 請求體 : GET請求沒有請求體,POST請求的引數 username=zs&password=123

2. 響應

  1. 響應行 : 協議 狀態碼 狀態嗎描述

    200: 請求成功 302: 重定向 304: 查詢本地快取 404: 請求路徑錯誤 405: 請求方式不被允許 500: 伺服器內部異常

  2. 響應頭 :

    key:value1,value2 Content-type : 響應內容的資料格式 Content-disposition : attachment;filename=xxx 以附件的形式開啟響應 location : 指定重定向的地址

  3. 響應體 : 輸出的資料

3. HttpServletRequest物件 請求傳送到伺服器之後,由伺服器建立的物件,封裝的是http協議的請求資訊

  1. 獲取請求訊息資料

    String method = request.getMethod();  //get/post
    String requestURI = request.getRequestURI();   //   /web10/user
    StringBuffer requestURL = request.getRequestURL(); //http://localhost:8080/web10/user
    String header = request.getHeader("User-Agent");// 客戶機資訊
    
    
  2. 獲取請求引數資料

    //獲取請求引數
    String username = request.getParameter("username"); //zs
    String[] hobbies = request.getParameterValues("hobby"); //[play,sleep]
    //獲取所有的請求引數
    Map<String, String[]> map = request.getParameterMap(); //{username:[zs],hobby:[play,sleep]}
    
    
  3. 作為域物件存取資料 : 一次請求範圍

    //作為域物件存取資料
    request.setAttribute("username","zs");
    String un = (String) request.getAttribute("username");
    request.removeAttribute("username");
    
    
  4. 實現頁面跳轉 轉發

    //1. 獲取請求轉發器
    RequestDispatcher dispatcher = request.getRequestDispatcher("/login.jsp");
    //2. 轉發
    dispatcher.forward(request,response);
    //鏈式程式設計~~ 
    request.getRequestDispatcher("/login.jsp").forward(request,response);
    
    
  5. 獲取SerlvetContext物件

    //獲取SerlvetContext物件
    ServletContext servletContext = request.getServletContext();
    
    

4. HttpServletResponse物件

請求傳送到伺服器之後,由伺服器建立的物件,封裝的是http協議的響應資訊

  1. 設定響應訊息資料
    //解決中文亂碼問題
    response.setContentType("text/html;charset=utf-8");
    //設定響應狀態嗎
    response.setStatus(200);
    //設定響應頭資訊
    response.setHeader("Content-Type","text/html;charset=utf-8");
    //設定響應體資訊 :  位元組流和字元流不能同時進行使用
    //字元流設定
    response.getWriter().write("hello");
    //位元組流設定
    response.getOutputStream().write("hello".getBytes("UTF-8"));	
    
    
  2. 頁面跳轉
    // 重定向: 如果request攜帶資料進行跳轉,那麼不能使用重定向只能頁面轉發
    //重定向的本質
    response.setStatus(302);
    response.setHeader("location",request.getContextPath()+"/login.jsp");
    //重定向的簡化方案
    response.sendRedirect(request.getContextPath()+"/login.jsp");
    
    
  3. 檔案下載 : 設定一個流 二個頭
    1. 目標資原始檔的輸入流
    2. 設定Content-Type: 型別
    3. 設定Content-Disposition: 開啟方式

5. SerlvetContext物件

  1. 獲取SerlvetContext物件

    //獲取SerlvetContext物件
    ServletContext servletContext = request.getServletContext();
    ServletContext servletContext = this.getServletContext();
    
    
  2. 獲取檔案的型別

    
    String mimeType = sc.getMimeType("aaa.txt");
    
    
  3. 讀取web專案下的資原始檔

    //獲取檔案的磁碟路徑
    String realPath = sc.getRealPath("/bb.txt"); //web目錄下
    String realPath1 = sc.getRealPath("/WEB-INF/bb.txt"); //WEB-INF目錄下
    String realPath2 = sc.getRealPath("/WEB-INF/classes/bb.txt");
    //直接讀取檔案到記憶體
    InputStream is = sc.getResourceAsStream("/WEB-INF/classes/bb.txt");
    
    
  4. 作為域物件存取資料 : 整個web專案

    //作為域物件存取資料
    sc.setAttribute("username","zs");
    String un = (String) sc.getAttribute("username");
    sc.removeAttribute("username");	
    
    

6. Cookie : 客戶端會話技術 儲存少量不敏感資料在客戶端

  1. 建立Cookie
    
    Cookie cookie = new Cookie(String name,String value)
    
    
  2. 向客戶端寫Cookie
    
    response.addCookie(cookie)
    
    
  3. 獲取客戶端傳送到伺服器的所有的Cookie
    
    Cookie[] cookies = request.getCookies()
    
    
  4. Cookie細節
    1. 瀏覽器可以儲存多個cookie
    2. cookie的儲存時間
      1. 預設瀏覽器關閉cookie銷燬
      2. 設定cookie持久化到硬碟 setMagAge(int second)
        1. 正數: 持久化的時間
        2. 負數: 預設值,瀏覽器關閉cookie銷燬
        3. 0: 刪除cookie
    3. 設定cookie的訪問路徑 cookie.setPath(String path)
    4. 設定cookie的有效域名 cookie.setDomain("baidu.com")
  5. 記住使用者上次訪問時間

7. Session : 伺服器會話技術

可以儲存大量的任意型別的的資料到伺服器

  1. 作用範圍: 一次會話,多次請求(每一個客戶端都會有自己的session區域)
  2. 獲取session
    //獲取session
    HttpSession session = request.getSession();
    
    
  3. 操作session
    //作為域物件存取資料
    session.setAttribute("username","zs");
    String un = (String) session.getAttribute("username");
    session.removeAttribute("username");	
    
    
  4. session細節
    1. 伺服器不關閉,客戶端關閉,二次獲取的session是否是同一個 不是
    2. 伺服器關閉,客戶端不關閉,二次獲取的session是否是同一個 不是 資料有可能是同一份(正常關閉伺服器)
    3. session過期
      1. 伺服器非正常關閉
      2. 呼叫session的session.invalidate();
      3. session過期(30分鐘)

8. JSP : java伺服器頁面 HTML+java程式碼+JSP本身

  1. JSP指令: <%@page %>, <%@include %>, <%@taglib %>
  2. 指令碼標籤: <% %>, <%! %>, <%= %>
  3. JSP註釋:<%-- --%>
  4. 內建物件: 物件 <=======>真實型別
    1. pageContext<=======> PageContext
    2. request <=======> HttpServletRequest
    3. session <=======> HttpSession
    4. application<=======> ServletContext
    5. response <=======> HttpServletResponse
    6. out <=======> JspWiter
    7. page <=======> Object
    8. config <=======> ServletConfig
    9. exception <=======> Throwable

9、EL表示式

  1. 執行運算子

    1. 算術運算子:+,-,*,/,%
    2. 比較運算子:>,<,>=,<=,!=,==
    3. 邏輯運算子:&&,||,!
    4. 三元運算子 :3>4?“false”:true
  2. .獲取資料 獲取四個域中的資料

    1. ${域範圍.鍵} :從指定域中獲取資料
    2. ${鍵} :從四個域中從小到達依次查詢,找到返回
    3. pageContextrequestsessionapplication