jetty'{servlet}/{parameter}'url路由

kcwpcxri  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(333)

我用的是jetty 9.0.3。
如何Mapurl,例如www.myweb.com/{servlet}/{parameter}到给定的servlet和参数?
例如,url'/client/12312'将路由到clientservlet及其 doGet 方法将接收12312作为参数。

jdg4fx2g

jdg4fx2g1#

你可以用 Jersey 并在 ResourceConfig 包裹,正在处理 ../worker/1234 url模式。
阅读更多:何时使用@queryparam与@pathparam

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

   }
}
ocebsuys

ocebsuys2#

你要担心两个部分。
您的应用程序中的路径规范 WEB-INF/web.xml 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模式的末尾,允许任何以 /client/ 要被接受,这对于pathinfo部分很重要。

路径信息

接下来我们进入servlet实现。
在clientservlet上的doget(httpservletrequest req,httpservletresponse resp)实现中,您应该访问req.getpathinfo()值,该值将接收请求url中位于 /client 你的网址模式。
例子:

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

此时,您可以根据路径info中的信息执行任何逻辑

相关问题