繁体   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