Servlet基礎知識點整理

MerryiTuXz發表於2018-12-14

這學期學Java Web,把相關知識點理了一下

Servlet介面

public interface Servlet {
    void init(ServletConfig var1) throws ServletException;

    ServletConfig getServletConfig();

    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    String getServletInfo();

    void destroy();
}
  • void init(ServletConfig var1):該方法接收一個ServletConfig型別的引數,Servlet容器通過這個引數向Servlet傳遞初始化配置資訊
  • ServletConfig getServletConfig():返回Servlet的ServletConfig物件,ServletConfig物件中包含Servlet的配置資訊
  • void service():生成HTTP響應
  • String getServletInfo():返回一個包含該Servlet資訊的字串
  • void destroy():當伺服器關閉或者Servlet物件被移除時,Servlet容器便會呼叫這個方法銷燬Servlet物件

一般自己實現的Servlet類都繼承自HttpServlet,而響應HTTP請求也不是直接重寫service()方法而是重寫HttpServlet的doGet()和doPost()方法,並且使用HttpServletRequset和HttpServletResponse而不是ServletRequest和ServletResponse

Servlet的實現,ServletConfig與ServletContext

@WebServlet(name = "MyServlet",urlPatterns = {"/myservlet"},
    initParams = {@WebInitParam(name = "age",value = "20"),
                @WebInitParam(name = "name",value = "MerryiTuXz")})
public class MyServlet extends HttpServlet {

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

    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletConfig servletConfig = getServletConfig();
        String name = servletConfig.getInitParameter("name"); //獲取初始化引數
        System.out.println(name); // `MerryiTuXz`

        ServletContext servletContext = getServletContext();
        servletContext.setAttribute("date",new Date());
        Date date = (Date) servletContext.getAttribute("date");
        System.out.println(date); // 列印訪問頁面的時間

        Enumeration<String> attributeNames = servletContext.getAttributeNames();
        while (attributeNames.hasMoreElements())
            System.out.println(attributeNames.nextElement());
        /*javax.servlet.context.tempdir
        date
        org.apache.catalina.resources
        org.apache.tomcat.InstanceManager
        org.apache.catalina.jsp_classpath
        javax.websocket.server.ServerContainer
        org.apache.jasper.compiler.ELInterpreter
        org.apache.jasper.compiler.TldCache
        org.apache.tomcat.JarScanner
        org.apache.jasper.runtime.JspApplicationContextImpl*/

        servletContext.removeAttribute("date");
        System.out.println(servletContext.getAttribute("date"));  // `null`
    }
}
  1. @WebServlet註解配置Servlet

    name:Servlet的名字

    urlPatterns:對映路徑

    initParams(可選):通過initParams和@WebInitParam註解傳入初始化引數,一個初始引數中有name和value兩部分。初始化引數可以通過ServletConfig的getInitParameter(String s)方法獲取

  2. ServletConfig

    當Servlet容器初始化一個Servlet時,會將該Servlet的配置資訊封裝到一個ServletConfig物件中,並通過呼叫init(ServletConfig config)方法將ServletConfig物件傳遞給Servlet

  3. ServletContext

    ServletContext代表當前的Servlet應用程式,每個Web應用程式只有唯一一個ServletContext物件

    可以通過呼叫getServletContext()方法獲得ServletContext物件

    ServletContext常用方法:

    方法 功能
    void setAttribute(String name, Object obj) 設定ServletContext的屬性,其中name是屬性名,obj是屬性值
    Object getAttribute(String name) 獲取ServletContext中名為name的屬性的值(沒有則返回null)
    void removeAttribute(String name) 從ServletContext中刪除名為name的屬性的值
    Enumeration getAttributeNames() 返回一個包含了存放在ServletContext中的所有的屬性的Enumeration物件

HttpServletRequest與HttpServletResponse

HttpServletResponse

HttpServletResponse被用來封裝HTTP響應訊息

常用方法如下:

方法 功能
PrintWriter getWriter() 返回一個可以向客戶端傳送訊息的PrintWriter
void setContentType(String var1) 設定Servlet輸出內容的MIME型別,對於HTTP協議來說就是設定Content-Type響應頭欄位的值
【解決中文亂碼:response.setContentType(“text/html;charset=utf-8”);】
void addHeader(String name, String value) 設定HTTP協議的響應頭欄位
void addCookie(Cookie cookie) 給響應物件新增一個Cookie

HttpServletRequest

HttpServletRequest被用來封裝HTTP請求訊息

常用方法如下:

方法 功能
String getContentType() 返回MIME型別,對HTTP協議來說就是返回Content-Type頭欄位的值
int getContentLength() 返回響應資料的大小(Content-Length頭欄位的值)
String getMethod() 返回HTTP請求的方法的名稱(GET,PUT,POST……)
String getHeader(String name) 返回指定HTTP首部的值
String getContextPath() 獲取URL中Web應用程式的路徑
String getQueryString() 獲取請求行中的引數部分,也就是資源路徑後面問號(?)以後的所有內容
Cookie[] getCookies() 返回一個Cookie陣列
HttpSession getSession() 返回與這個請求相關的Session物件,如果沒有則建立一個新的會話物件
String getParameter(String var1) 獲取表單(或查詢字串)請求中指定名稱的引數的值
String[] getParameterValues(String var1) 獲取表單(或查詢字串)請求中指定名稱的引數對應的所有的值
Enumeration 返回一個包含請求訊息中所有引數名字的Enumeration物件

相關文章