我正在重做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?
答案 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>