构建多个servlet请求url模式

时间:2015-05-04 09:13:27

标签: java servlets

我正在使用servlet从前端获取请求。 我能够制作单个servlet,可以根据url模式进行多次操作吗? 这将是我的网址映射

<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:/ HelloServlet:它应该执行功能1
  • URL:/ HelloServletOne:它应该执行功能2
  • URL:/ HelloServletTwo:它应该执行功能3等。

如何通过扩展servlet来实现这一目标 我们非常感谢代码/链接示例。

4 个答案:

答案 0 :(得分:5)

关于您的网址格式,您需要知道调用了哪个网址。因为可以根据不同的http方法(GET,POST等)发出请求,所以您可以使用FrontController Pattern

的部分内容
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检查的其他信息this link

答案 1 :(得分:0)

为此,您不应该使用三种不同的Servlet。您应该使用不同的Servlet方法来实现这一目标。

使用 doGet 方法获取数据 使用 doPost 方法插入数据 使用 doPut 方法更新数据 使用 doDelete 方法删除数据。

请参阅servlet api documentation了解详情。

修改
阅读有关此here的更多信息。 它表示如果您使用的是servlet api版本 2.5或更高版本,则您提供的网址映射必须有效。

另外,请确保您在<servlet-name>中提供了 servlet类的完全限定名称

答案 2 :(得分:0)

您可以通过签订合同来处理'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();
               }
      }

}

答案 3 :(得分:0)

我做了。

HttpServletRequest.getRequestURI()返回包含/ *和查询参数的URL模式(如果存在),HttpServletRequest.getPathInfo()返回与/ *匹配的部分(或完全匹配时为null)。

在我的情况下,我需要getPathInfo()返回的地方 HelloServlet,HelloServletOne或HelloServletTwo基于请求。 感谢。