Jetty'{servlet} / {parameter}'网址路由

时间:2013-06-06 14:44:55

标签: java url dictionary routing jetty

我正在使用jetty 9.0.3。

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

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

2 个答案:

答案 0 :(得分:5)

您需要担心两部分。

  1. WEB-INF/web.xml
  2. 中的pathSpec
  3. 您的servlet中的HttpServletRequest.getPathInfo()
  4. pathSpec

    在你的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>
    

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

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

    pathInfo

    接下来我们进入Servlet实现。

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

    示例:

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

    此时,您可以对路径信息中的信息执行任何逻辑操作

答案 1 :(得分:1)

您可以使用Jersey并在处理ResourceConfig网址格式的../worker/1234包中注册以下类。

了解详情:When to use @QueryParam vs @PathParam

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

   }
}