如何使用标准servlet和web.xml映射Spring或RESTful之类的URL

时间:2012-01-09 14:50:37

标签: java url

我想在标准的servlet web.xml配置中使用类似于下面的spring框架的URL映射。

 @RequestMapping(value="/students/{username}", method=RequestMethod.GET)
  public String deleteSpitter(@PathVariable String username) {
    ...
    ...
  }

我想要像这两样的URL映射:

/生/麦克

/生/约翰

要映射到同一个servlet,我也可以以某种方式读取“Mike”和“John”作为参数。如果它可以扩展到多个级别,如下面的例子那么对我来说非常有用:

/生/ {schoolname} / {studentname} 像:

/生/麦吉尔/麦克

/生/ UBC /约翰

3 个答案:

答案 0 :(得分:1)

查看UrlRewriteFilter:http://www.tuckey.org/urlrewrite/

http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/3.2/guide.html的示例中,请查看“清理网址”示例。

答案 1 :(得分:1)

JAX-RS(又名Jersey)可以使用servlet应用程序执行类似的操作(尽管不是只是 servlet)

答案 2 :(得分:1)

您可以将标准servlet映射到通配符路径,并使用HttpServletRequest.getPathInfo()方法访问请求的pathInfo部分。

servlet应该像这样获取路径信息

package com.acme;

public class TestServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String info = request.getPathInfo();
    }

}

你应该像你这样在web.xml中映射servlet

<servlet>
    <servlet-name>test-servlet</servlet-name>
    <servlet-class>com.acme.TestServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>test-servlet</servlet-name>
    <url-pattern>/test/*</url-pattern>
</servlet-mapping>

如果您请求网址'/ test / mcgill / mike',路径信息将为'/ mcgill / mike'。解析路径信息取决于您。

如果您使用符合Java EE 6的容器,您还应该查看JAX-RS specification以构建RESTful Web服务。