我正在我的 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/