3.Servlet物件

哈士费發表於2024-04-12

ServletConfig物件
ServletContext物件
request物件
response物件

3.1 ServletConfig物件

常用方法:getServletConfig();
功能:getServletName();  //獲取servlet的名稱,也就是我們在web.xml中配置的servlet-name

     getServletContext(); //獲取ServletContext物件,該物件的作用看下面講解
     getInitParameter(String); //獲取在servlet中初始化引數的值。這裡注意與全域性初始化引數的區分。這個獲取的只是在該servlet下的初始化引數
getInitParameterNames(); //獲取在Servlet中所有初始化引數的名字,也就是key值,可以透過key值,來找到各個初始化引數的value值。注意返回的是列舉型別

3.2. ServletContext物件

常用方法:getServletContext(); 、getServletConfig().getServletContext();  
//這兩種獲取方式的區別就跟上面的解釋一樣,第一種是直接拿,在GenericServlet中已經幫我們用getServletConfig().getServletContext();拿到了ServletContext。我們只需要直接獲取就行了,第二種就相當於我們自己在獲取一遍,兩種讀是一樣的。

  功能:tomcat為每個web專案都建立一個ServletContext例項,tomcat在啟動時建立,伺服器關閉時銷燬,在一個web專案中共享資料,管理web專案資源,為整個web配置公共資訊等,通俗點講,就是一個web專案,就存在一個ServletContext例項,每個Servlet讀可以訪問到它。
常用函式:
1. web專案中共享資料,getAttribute(String name)、setAttribute(String name, Object obj)、removeAttribute(String name)

     * setAttribute(String name, Object obj) 在web專案範圍記憶體放內容,以便讓在web專案中所有的servlet讀能訪問到

     * getAttribute(String name) 透過指定名稱獲得內容

     * removeAttribute(String name) 透過指定名稱移除內容  
2.整個web專案初始化引數 //這個就是全域性初始化引數,每個Servlet中都能獲取到該初始化值

     * getInitPatameter(String name)  //透過指定名稱獲取初始化值

     * getInitParameterNames()  //獲得列舉型別
3. getResourcePaths(java.lang.String path) 指定路徑下的所有內容。

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();

        String username = "fei"; // 資料
        servletContext.setAttribute("username",username);
    }
}
public class GetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String username = (String) context.getAttribute("username");

        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        resp.getWriter().print("名字"+username);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

3.3 request物件

在Java Servlet API中,HttpServletRequest 物件代表客戶端傳送到伺服器的請求。這個物件包含了所有與HTTP請求相關的資訊,如請求引數、頭資訊、URL、HTTP方法等。 HttpServletRequest 物件由Servlet容器建立,並作為引數傳遞給Servlet的服務方法(如doGet, doPost等)。

  1. 請求行內容
  2. 請求頭
String contentType = request.getHeader("Content-Type");
  1. 路徑資訊
    上下文路徑:getContextPath 返回Web應用的上下文路徑。
String contextPath = request.getContextPath();

路徑資訊:getPathInfo 提供額外的路徑資訊(URL中,Servlet路徑之後的部分)。

String pathInfo = request.getPathInfo();
  1. HTTP方法

可以透過 getMethod 方法獲取客戶端請求使用的HTTP方法,如GET、POST等。

String method = request.getMethod();
  1. 會話管理

HttpServletRequest 提供 getSession 方法來獲取當前的 HttpSession 物件。如果當前請求沒有會話,則可以建立一個新的會話。

HttpSession session = request.getSession();
HttpSession sessionWithNoNew = request.getSession(false);  // 不建立新會話

3.4 response物件

在Java Servlet API中,HttpServletResponse物件是一個非常重要的元件,用於構建和傳送Web伺服器的響應給客戶端(通常是Web瀏覽器)。這個物件提供了一系列方法,可以用來設定響應的內容型別、狀態碼、管理cookie、重定向和輸出響應內容等。

  1. 設定響應狀態
    HttpServletResponse 提供了方法來設定HTTP響應的狀態碼。例如:
response.setStatus(HttpServletResponse.SC_OK); // 設定狀態為200
  1. 寫入響應體
    要傳送響應體,你可以使用 getWriter() 或 getOutputStream() 方法。這取決於你要傳送的資料型別(文字或二進位制):
PrintWriter out = response.getWriter();
out.println("<html><body><h1>Hello, World!</h1></body></html>");

或者,傳送二進位制資料(如影像檔案):

ServletOutputStream out = response.getOutputStream();
out.write(myByteArray);
  1. 設定響應頭
    可以使用 setHeader 方法來設定HTTP頭資訊。
response.setContentType("text/html;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=\"filename.txt\"");
  1. 重定向
response.sendRedirect("http://www.example.com");

相關文章