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

mbm*_*ura 4 java url routing dictionary jetty

我正在使用jetty 9.0.3.

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

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

Joa*_*elt 6

你有2个部分需要担心.

  1. 您的路径规范 WEB-INF/web.xml
  2. servlet中的HttpServletRequest.getPathInfo().

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>
Run Code Online (Sandbox Code Playgroud)

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

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

pathInfo

接下来我们进入Servlet实现.

在ClientServlet上的doGet(HttpServletRequest req,HttpServletResponse resp)实现中,您应该访问req.getPathInfo()值,该值将接收位于/clienturl-pattern 之后的请求URL部分.

例:

Request URL        Path Info
----------------   ------------
/client/           /
/client/hi         /hi
/client/world/     /world/
/client/a/b/c      /a/b/c
Run Code Online (Sandbox Code Playgroud)

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