【问题标题】:Servlet mapping direct JSP files rather than using a Servlet to manage the URL requestsServlet 映射直接 JSP 文件而不是使用 Servlet 来管理 URL 请求
【发布时间】:2013-05-20 17:14:49
【问题描述】:

我正在我的 Java Web 应用程序中重做 URL 映射结构。我正在尝试找到最有效和最合适的方法来将服务小程序和资源映射到它们的正确 URL。

我已经能够创建两种策略,但我不确定哪个更有效。

将所有 url 映射到一个处理请求的 Servlet

在这种情况下,我有一个名为“URL”的 Servlet,具有以下 servlet 映射:

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

url Servlet 像示例一样设置并且工作正常:

String task = request.getRequestURI().substring(request.getContextPath().length());
if ("/home".equals(task)){
    RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/home.jsp");
    dispatcher.forward(request, response);
}

我最初遇到的问题是没有提供所有静态资源,例如 JS、图像等。作为解决方案,我可以选择为静态内容创建单独的目录,但我突然转而将其全部映射到 web.xml 中。

直接在 web.xml 中映射。

在这种情况下,url 模式直接映射到 JSP 和 Servlet,如下所示:

<servlet>
  <servlet-name>home</servlet-name>
  <jsp-file>/jsp/Home.jsp</jsp-file>
</servlet>
<servlet-mapping>
  <servlet-name>home</servlet-name>
  <url-pattern>/home</url-pattern>
</servlet-mapping>

例子:

localhost:8080/home <- home.jsp

localhost:8080/about <- about.jsp

localhost:8080/login <- doLogin servlet

这些不好吗?将 url 映射到其预期的 JSP 文件和 Servlet 的更有效和正确的方法是什么?

【问题讨论】:

    标签: java jsp servlets


    【解决方案1】:

    我将两者结合使用,我在 web.xml 中定义了所有静态页面,并在 web.xml 的末尾创建了一个处理动态页面的包罗万象。

    所以home、about、login等都是静态页面,在web.xml中定义 像 account/abc 和 blog/some-random-article 这样的东西是动态处理的。

    <servlet>
        <servlet-name>NotFound</servlet-name>
        <servlet-class>com.site.PageNotFoundServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>NotFound</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    

    如果在您的 servlet 代码中,如果您不知道如何处理 url,换句话说,url 类似于 /asdfadfasdf 之类的东西,您不处理,如果 url 以 /blog 开头,则返回 404 (来自/blog/random-article),进入以random-article为内容的博客页面。

    【讨论】:

      【解决方案2】:

      这里“home.jsp”的情况不一样

       RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/home.jsp")
      

      <servlet>
       <servlet-name>home</servlet-name>
        <jsp-file>/jsp/**Home.jsp**</jsp-file>
      </servlet>
      <servlet-mapping>
      <servlet-name>home</servlet-name>
      <url-pattern>/home</url-pattern>
      </servlet-mapping>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-18
        • 1970-01-01
        • 1970-01-01
        • 2012-01-20
        • 2017-09-21
        • 1970-01-01
        • 2015-07-17
        相关资源
        最近更新 更多