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

标签 java jsp servlets

我正在我的 Java Web 应用程序中重做 URL 映射结构。我正在尝试找到最有效、最正确的方法来将servlet 和资源映射到正确的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 哪种方法更有效、更正确?

最佳答案

我使用两者的组合,我在 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为内容的博客页面。

关于java - Servlet 直接映射 JSP 文件,而不是使用 Servlet 来管理 URL 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16746212/

相关文章:

java - JSTL 相当于 jsp 标签

java - 在 Windows CE 中,可以在关闭子 IE 窗口时强制将焦点集中在调用 IE 窗口上吗?

java - 将非线程安全类 (FileBody) 发送到多线程容器

java - 获取自定义 Spring 作用域中的当前请求

java - 检查字符串是否为回文(使用方法)

java - 斐波那契迭代 : To find the nth term of the Fibonacci sequence for n > 50

java - JSP不调用ajax函数

java - 将压缩目录输出到 ByteArrayOutputStream

java - 无法右键单击,Java Selenium WebDriver java.lang.UnsupportedOperationException : contextMenu

java - 根据具有相同名称的特定字段的权重调整 Lucene 搜索结果分数