4

我正在使用码头 9.0.3。

如何将诸如 www.myweb.com/{servlet}/{parameter} 之类的 URL 映射到给定的 servlet 和参数?

例如,URL '/client/12312' 将路由到 clientServlet,其doGet方法将接收 12312 作为参数。

4

2 回答 2

6

你需要担心两个部分。

  1. 你的 pathSpecWEB-INF/web.xml
  2. Servlet 中的HttpServletRequest.getPathInfo()

路径规范

WEB-INF/web.xml你必须声明你的 Servlet 和你的 url 模式(也称为 pathSpec)。

例子:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 
   xmlns="http://java.sun.com/xml/ns/javaee" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   metadata-complete="false"
   version="3.0"> 

  <display-name>Example WebApp</display-name>

  <servlet>
    <servlet-name>clientServlet</servlet-name>
    <servlet-class>com.mycompany.ClientServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>clientServlet</servlet-name>
    <url-pattern>/client/*</url-pattern>
  </servlet-mapping>
</web-app>

这将 servlet 设置为com.mycompany.ClientServlet名称上的类,clientServlet然后指定/client/*传入请求 URL 的 url 模式。

/*url-pattern 末尾的extra允许/client/接受以 开头的任何传入模式,这对于 pathInfo 部分很重要。

路径信息

接下来我们进入我们的 Servlet 实现。

在 ClientServlet 上的doGet(HttpServletRequest req, HttpServletResponse resp)实现中,您应该访问req.getPathInfo()值,它将接收/client在您的 url 模式之后的请求 URL 部分。

例子:

Request URL        Path Info
----------------   ------------
/client/           /
/client/hi         /hi
/client/world/     /world/
/client/a/b/c      /a/b/c

此时,您可以针对路径信息中的信息执行任何您想要的逻辑

于 2013-06-06T15:23:36.220 回答
2

您可以Jersey在包中使用和注册以下ResourceConfig处理../worker/1234url 模式的类。

阅读更多:何时使用 @QueryParam 与 @PathParam

@Path("v1/services/{entity}")
@GET
public class RequestHandler(@PathParam("entity")String entity, @PathParam("id")String id){
   @path({id})
   public Entity handle(){

   }
}
于 2016-02-20T09:09:06.473 回答