簡體   English   中英

構造多個servlet請求url模式

[英]Framing multiple servlet request url pattern

我正在使用servlet從前端獲取請求。 我能否制作一個可以基於url模式執行多個操作的servlet? 這是我的網址映射

<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
<url-pattern>/HelloServletOne</url-pattern>
<url-pattern>/HelloServletTwo</url-pattern>
</servlet-mapping>

這意味着,如果我按如下所示訪問URL,則應調用其自身的功能。

  • URL:/ HelloServlet:它應該執行功能1
  • URL:/ HelloServletOne:應該執行功能2
  • URL:/ HelloServletTwo:應該執行3等功能

我如何通過擴展servlet實現這一點?
代碼/鏈接示例非常受贊賞。

關於您的url模式,您需要知道調用了什么URL。 由於可以通過不同的http方法(GET,POST等)發出請求,因此可以使用FrontController模式的一部分

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {

  private static final String SERLVET = "HelloServlet";
  private static final String SERLVET_ONE = "HelloServletOne";
  private static final String SERLVET_TWO = "HelloServletTwo";

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    processRequest(req, resp);
  }

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

  private void processRequest(HttpServletRequest req, HttpServletResponse resp) {
    String path = req.getServletPath();
    switch (path) {
      case SERLVET:
        // ... call your function1
        break;
      case SERLVET_ONE:
        // ... call your function2
        break;

      case SERLVET_TWO:
        // ... call your function3
        break;
      default:
        break;
    }

    // do something else
  }

}

getServletPath方法可能僅適用於像您給定的顯式url模式。 有關URL的其他信息,請檢查此鏈接

為此,您不應使用三個不同的Servlet。 您應該使用Servlet的不同方法來實現此目的。

使用doGet方法獲取數據。
使用doPost方法插入數據。
使用doPut方法更新數據。
使用doDelete方法刪除數據。

請參閱servlet api文檔以獲取更多詳細信息。

編輯:
在此處閱讀有關此內容的更多信息。 它說,如果您使用的是servlet api 2.5或更高版本,則必須提供提供的url映射。

另外,請確保在<servlet-name>提供了servlet類的全限定名稱

您可以通過簽訂具有諸如'ACTION'類的請求參數的合同來處理同一個servlet的多個請求。 然后在表單中將其添加為隱藏字段,並使用'ACTION_1''ACTION_2''ACTION_3' 因此,在doPost()您可以檢查此參數值,並可以在同一servlet中調用相應的處理方法。

class YourServlet extends HttpServlet{

      public void doPost(HttpReq req, HttpResp resp){
               String action = reg.getParameter('ACTION');
               if('ACTION_1'.equals(action)){
                   doAction_1();
               }
               if('ACTION_2'.equals(action)){
                   doAction_2()
               } 
               if('ACTION_3'.equals(action)){
                   doAction_3()
               }
               else {
                   defaultAction();
               }
      }

}

我做成了。

HttpServletRequest.getRequestURI()返回帶有查詢參數(包括/ * HttpServletRequest.getRequestURI()的URL模式HttpServletRequest.getRequestURI()如果存在),而HttpServletRequest.getPathInfo()返回與/ *匹配的部分(對於完全匹配,返回null)。

在我的情況下,我需要getPathInfo() ,它將根據請求返回HelloServlet,HelloServletOne或HelloServletTwo。 謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM