【问题标题】:Can I have custom servlet URL in java?我可以在 java 中有自定义 servlet URL 吗?
【发布时间】:2011-08-09 12:08:56
【问题描述】:

我希望当用户点击以下网址时:

http://host:8080/AppName/ServletName/Param1/Param2

它应该转到一个名为ServletName 的servlet,Param1Param2 成为请求参数。我在 ruby​​ 项目中看到过这类 url。用Java可以吗?

【问题讨论】:

  • BalusC 已经在某个地方发布了一个遮阳篷,让我看看。
  • 这里是the answer
  • @cularis:是的。 +1。

标签: java servlets


【解决方案1】:

如果您使用的是 Spring MVC,您可以映射 @Controller 并在 @RequestMapping 中以 @PathVariable 的形式访问参数。

@Controller
public class MyController {

  @RequestMapping("/{param1}/{param2})
  public Response get(@PathVariable("param1") String param1, @PathVariable("param2") String param2) {
    //method body
  }

}

【讨论】:

    【解决方案2】:

    是的,您可以使用 servlet 执行类似的操作。您需要像这样在 web.xml 中设置 servlet 映射:

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

    要获取所有请求,您需要在 servlet 中解析 HttpServletRequest.getPathInfo() 的结果。

    【讨论】:

      【解决方案3】:

      HttpServletRequest.getContextpath() 似乎很有趣,尽管我自己从未使用过。

      【讨论】:

        【解决方案4】:

        当然可以,它叫做REST,你可以在这里获得简介:http://download.oracle.com/javaee/6/tutorial/doc/giepu.html

        您还可以将 servlet 映射到通配符路径,因此您只需将 servlet 映射到 /ServletName/* 并从 request.getPathInfo() 获取 /Param1/Param2 部分。

        【讨论】:

          【解决方案5】:

          您也可以通过URL rewriting 实现此目的。还有一个等效的 servlet 容器可用,可与名为 UrlRewriteFilter 的 ServletFilter 一起使用。

          我个人使用Tapestry5,它以这种方式对参数进行原生编码。

          【讨论】:

            【解决方案6】:

            我没做过,甚至没见过但试试这个

            先像这样映射web.xml中的url

                <servlet>
                <servlet-name>ServletName</servlet-name>
                <servlet-class>ServletName</servlet-class>
            </servlet>
                <servlet-mapping>
                <servlet-name>ServletName</servlet-name>
                <url-pattern>/ServletName/Param1/Param2</url-pattern>
            </servlet-mapping>
            

            然后使用 String url=request.getRequestURI();

            那么就可以拆分得到param1和param2了。

            【讨论】:

              猜你喜欢
              • 2023-03-30
              • 1970-01-01
              • 2015-01-13
              • 1970-01-01
              • 1970-01-01
              • 2011-05-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多