2

我正在我的 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 的更有效和正确的方法是什么?

4

2 回答 2

4

我将两者结合使用,我在 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 开头(来自 / blog/random-article),进入以random-article为内容的博客页面。

于 2013-05-25T04:29:07.440 回答
1

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>
于 2014-03-09T03:58:17.943 回答