![](/img/trans.png)
[英]The servlet container, the servlet url pattern and request wrappers
[英]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,則應調用其自身的功能。
我如何通過擴展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.