Servlet映射直接JSP文件,而不是使用Servlet来管理URL请求

时间:2013-05-25 03:53:56

标签: java jsp servlets

我正在重做Java Web应用程序中的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?

2 个答案:

答案 0 :(得分: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,你没有处理,抛出404,如果url以/ blog开头(来自/ blog / random-article),转到以随机文章为内容的博客页面。

答案 1 :(得分:0)

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>
相关问题