索尼 Xperia 1 III 系統更新,魅族 Flyme 適配的本地應用來了
阿新 • • 發佈:2021-10-19
package com.an.tomcatservlet; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; /** * @author apy * @description * @date 2021/10/20 17:55 */ public class MyServlet extends HttpServlet { @Override public void init() throws ServletException { super.init(); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); String method = req.getMethod(); req.getParameter(""); req.setCharacterEncoding("utf-8"); req.getRequestDispatcher("請求路徑").forward(req, resp); req.setAttribute("", "");// put req.getAttribute("");// get // 響應頭 resp.setHeader("", ""); resp.addHeader("", ""); resp.setHeader("Content-Type", "text/html"); resp.setContentType("text/plain"); // 響應狀態碼 resp.setStatus(1, ""); // 響應內容 resp.getWriter().write(""); resp.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8"); resp.sendRedirect("請求路徑"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); Cookie cookie = new Cookie("jack", "123344"); cookie.setMaxAge(3*24*3600); cookie.setPath("/tb/"); resp.addCookie(cookie); HttpSession session = req.getSession(); session.setAttribute("", "");// set session.getAttribute("");// get session.setMaxInactiveInterval(200); } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.service(req, resp); this.getServletContext(); this.getServletConfig().getServletContext(); ServletContext servletContext = req.getServletContext(); servletContext.getInitParameter(""); ServletConfig servletConfig = this.getServletConfig();// get String initParameter = servletConfig.getInitParameter(""); } @Override public void destroy() { super.destroy(); } /** * 【servlet】 * 一個Servlet 負責 對應的一個URL訪問請求,並返回相應的響應內容 * 在web.xml中 新增 請求URL與Servlet的對映關係 */ /** * 【servlet生命週期】 * 建立: 當客戶端請求時,servlet容器根據 請求路徑 在web.xml中找到 指定的servlet類,然後反射生成物件 * 銷燬: 當 servlet容器銷燬時,servlet物件 銷燬 * * 上述也不是絕對情況,可以 在web.xml中使用<load on startup>1<load on startup/> 可以將指定的servlet在容器啟動時建立 */ /** * 【servlet容器的Request物件、Response物件】 * servlet容器 將 客戶端請求 封裝為 Request物件 * * servlet容器 將 客戶端請求處理結果 封裝為 Response物件 */ /** * 【servlet亂碼問題】 * 1、結果亂碼: * 對結果使用String進行重新編碼 * String nameSrc = "jack"; * String name = new String(nameSrc.getBytes("ios-8859-1"), "utf-8"); * 2、get、post請求亂碼 * req.setCharacterEncoding("utf-8"); * 3、response亂碼 * resp.setCharacterEncoding("utf-8"); * resp.setContentType("text/html;charset=utf-8"); */ /** * 【servlet Request請求轉發】 * 為了實現 同一個請求 可以跳轉多個servlet * req.getRequestDispatcher("請求路徑").forward(req, resp); * * 客戶端只發送一次請求 * 瀏覽器位址列不會變化 * 請求過程中 只有 一個Request、Response * 多個 servlet 共享一個 Request、Response */ /** * 【servlet Request作用域】 * 為了實現 在同一個請求 中 多個servlet 可以資料共享 * req.setAttribute("", "");// put * req.getAttribute("");// get */ /** * 【servlet Response重定向】 * 請求轉發 每次請求 都需要 重新提交表單,為了解決這個問題 * resp.sendRedirect("請求路徑"); * * 客戶端傳送2次請求 * 瀏覽器地址發生變化 * 請求過程中 有2個Request、Response * 2個servlet不能共享 同一個 Request、Response */ /** * 【servlet cookie】 * why? * 為了解決 客戶端傳送不同請求,需要相同資料 問題; * what? * 一種 在客戶端 儲存 http狀態資訊的 技術; * * 當 客戶端首次請求伺服器時,伺服器會在 響應頭 傳送給 客戶端, * 瀏覽器儲存了cookie後,以後每次請求伺服器,都會在 請求頭 攜帶cookie 傳送至伺服器; * * 一個cookie 只能記錄一種資訊,k-v形式; * * 一個伺服器可以 給瀏覽器 傳送多個cookie,一個瀏覽器 也可以儲存多個cookie; * how? * Cookie cookie = new Cookie("jack", "123344"); * resp.addCookie(cookie); * * 分類: * 臨時cookie * 預設儲存在記憶體中,當瀏覽器關閉,cookie失效; * 永續性cookie * Cookie cookie = new Cookie("jack", "123344"); * cookie.setMaxAge(3*24*3600); * resp.addCookie(cookie); * * 儲存在瀏覽器的某個儲存目錄,過期後,才會失效; * * 每個cookie 只儲存一對k-v,如果想儲存多個cookie,需要建立多個cookie物件; * * cookie.setPath("/tb/"); * 只有 請求路徑 與 cookie路徑相關,cookie才會生效; */ /** * 【servlet session】 * why? * 為了解決 客戶端傳送不同請求,需要相同資料 問題; * what? * 一種 在伺服器 儲存 http這條資訊的 技術; * 依賴 cookie 技術 實現; * 伺服器 生成的session (k-v),客戶端請求時 攜帶 k * 每個使用者獨立擁有一個session物件; * 預設儲存時間是30分鐘; * * session : * k : jsessionid * v : session值 * * how? * HttpSession session = req.getSession(); * session.setAttribute("", "");// set * session.getAttribute("");// get * * 每次關閉瀏覽器,session會失效,重新請求會重新生成一個session; * * 自定義 session 生存時長 ; * session.setMaxInactiveInterval(200); * * */ /** * 【servlet ServletContext】 * why? * 解決不同使用者 資料共享 問題; * what? * 執行在 JVM上的每個 web應用程式 都有 一個 與之對應的ServletContext; * * ServletContext可以被 web應用程式的 所有servlet訪問; * * How? * ServletContext 由 Servlet容器建立,一個 web應用程式 只有 一個 ServletContext物件; * * 獲取ServletContext: * this.getServletContext(); * this.getServletConfig().getServletContext(); * req.getServletContext(); * * 其他作用: * 獲取web.xml中配置的公共屬性值 * servletContext.getInitParameter(""); * * 獲取 應用程式路徑 */ /** * 【servlet ServletConfig】 * why? * 在web.xml中 每個servlet 可以自定義 初始化引數,但是 ServletContext只能獲取 應用級的 初始化引數; * * How? * 獲取當前 servlet的 初始化引數 * ServletConfig servletConfig = this.getServletConfig();// get * String initParameter = servletConfig.getInitParameter(""); * */ }