我在Tomcat中运行了一个简单的Java Web应用程序。
在其中,FrontController.java servlet 具有映射@WebServlet("/controller/*")
。因此,为了触发servlet,我需要我的每个url都以/controller/
开头。我需要能够在存储在容器外部的页面上显示图像,以便将它们写入OutputStream
(。但是,如果我像${pageContext.request.contextPath}images/picture.jpg
一样编写我的 src 网址,那么生成的网址显然是localhost:8080/rootFolder/images/picture.jpg
的,而不是localhost:8080/rootFolder/controller/images/picture.jpg
的。
要加载这些文件,我可以在每次${pageContext.request.contextPath}
后手动预置controller/
,或者我可以按照此处的建议将 dispather servlet 映射附加到 url 并将行request.setAttribute("frontControllerMapping", "controller/");
添加到处理请求的每个方法,然后像这样编码 url${pageContext.request.contextPath}${frontControllerMapping}images/picture.jpg
哪个更好。
我的问题是如何将控制器映射附加到必须由 servlet 处理的每个 url 以及如何正确操作?第二种选择是正确的方法吗?
您可以使用相对 URL 来代替为每个资源添加完整的 URL。如果这不是一个选项,那么您可以简单地将所有请求映射到您的 servlet,如下所示:
@WebServlet("/*")
然后,您无需担心将控制器路径添加到所有 URL。