在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    Servlet總結十:HttpServlet

    為了使前后端的請求方式相同,我們需要在后端獲取請求方式,然后進行判斷前端發(fā)送的請求是否為規(guī)定的請求方式,如果不是規(guī)定的請求方式,就會報錯;

    為了實現上述功能,此功能的代碼需要在每一個Servlet類中都需要編寫,怎么能封裝一下,以后在每一個具體的Servlet類中不寫這樣的代碼了,但是還是能夠達到同樣的效果?

    1、自定義的HttpServlet類,解決判斷前后端請求方式是否一致的問題

    public class HttpServlet extends GenericServlet { /** * 此方法為原始service()方法,方法內將ServletRequest、ServletResponse強轉為帶有http的接口 * 然后調用重載的service(HttpServletRequest, HttpServletResponse)方法 * 所以此方法我們無需進行重寫 */ @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; service(request,response); } /** * 此方法獲取請求方式后進行判斷, * 如果是GET請求就執(zhí)行doGet() * 如果是POST請求就執(zhí)行doPost() * 此方法沒有理由重寫,只需要將業(yè)務代碼寫在doGet()或doPost()方法中即可 */ public void service(HttpServletRequest request, HttpServletResponse response) throws IOException { String method = request.getMethod(); if(“POST”.equals(method)) { doPost(request, response); } else if(“GET”.equals(method)) { doGet(request, response); } } /** * 我們需要什么請求時,子類繼承此父類就應當重寫對應的doGet()或者doPost()方法之一 * 在doGet()或者doPost()方法內寫業(yè)務代碼,即將原來的service()內的業(yè)務代碼寫到doXXX()中 */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType(“text/html;charset=UTF-8”); response.getWriter().print(“應當發(fā)送GET請求”); throw new RuntimeException(“應當發(fā)送GET請求”); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType(“text/html;charset=UTF-8”); response.getWriter().print(“應當發(fā)送POST請求”); throw new RuntimeException(“應當發(fā)送POST請求”); }}

    當有了HttpServlet類之后,寫一個login類(Servlet)來繼承HttpServlet類試試

    public class login extends cn.test.HttpServlet { @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType(“text/html;charset=UTF-8”); response.getWriter().print(“登陸成功!”); }}

    當Tomcat服務器啟動并且通過瀏覽器訪問此Servlet對應的頁面時,Tomcat會執(zhí)行l(wèi)ogin類,假設login類需要的是POST請求,所以我們將繼承自父類的doPost()重寫為我們需要的業(yè)務代碼,執(zhí)行順序為:

    • 假設前端發(fā)送的是POST請求

    1、service(ServletRequest, ServletResponse) 將兩個參數強轉為帶有Http的接口,之后執(zhí)行

    2、service(HttpServletRequest, HttpServletResponse)獲取請求方式POST并通過判斷執(zhí)行重寫的doPost()方法doPost(HttpServletRequest, HttpServletResponse) 執(zhí)行業(yè)務代碼

    • 假設前端發(fā)送的是GET請求

    1、service(ServletRequest, ServletResponse) 將兩個參數強轉為帶有Http的接口,之后執(zhí)行

    2、service(HttpServletRequest, HttpServletResponse)獲取請求方式GET并通過判斷執(zhí)行未被重寫的doGet()方法

    3、doGet() 報錯,將錯誤信息輸出到控制臺和前端頁面

    所以,我們的Servlet繼承HttpServlet后,后端需要的是什么請求,那么我們就重寫對應的doPost()/doGet()方法,方法內是我們的業(yè)務代碼,并不需要重寫service()方法

    官方的HttpServlet

    實際上SUN公司為我們提供了一個類來解決判斷前后端請求方式是否一致的類javax.servlet.http.HttpServlet

    此類和我們自定義的HttpServlet類的使用方法和原理類似,所以總結如下的使用方法和注意

  • 我們的Servlet繼承HttpServlet后,后端需要的是什么請求,那么我們就重寫對應的doPost()/doGet()方法
  • doPost()/doGet()方法內就是我們的業(yè)務代碼,doXXX()可以看作main()方法
  • 代碼不在service()內編寫了,不需要重寫service()方法
  • HttpServlet中重載的兩個service()方法并不需要也沒有理由去重寫這兩個方法
  • 當瀏覽器發(fā)送的請求方式和后臺處理方式不同時,會出現一個錯誤,代號:405
  • 鄭重聲明:本文內容及圖片均整理自互聯網,不代表本站立場,版權歸原作者所有,如有侵權請聯系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年6月30日 20:04
    下一篇 2022年6月30日 20:04

    相關推薦

    聯系我們

    聯系郵箱:admin#wlmqw.com
    工作時間:周一至周五,10:30-18:30,節(jié)假日休息