gpt4 book ai didi

java - 在 JSF 中,我可以在 URL 中隐藏 XHTML 文件的部分目录层次结构吗?

转载 作者:行者123 更新时间:2023-12-01 15:37:54 25 4
gpt4 key购买 nike

在 JSF 应用程序中,我们有目录层次结构:

webapp
xhtml
login.xhtml
main.xhtml
search.xhtml
css
main.css
extra.css
js
jquery.js

等等。 Servlet 映射为:

<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

这工作正常,但我们的网络应用程序的 URL 如下所示:

http://localhost/myapp/xhtml/login.xhtml
http://localhost/myapp/xhtml/search.xhtml

我们希望通过删除 /xhtml 来获得更简单的 URL部分,即 http://localhost/myapp/login.xhtml

我找不到任何方法来完成此任务。有没有办法在 <servlet-mapping> 中做到这一点?我需要一些额外的框架吗?

最佳答案

可以使用Filter来做到这一点。要么是本土的,要么是第三方的,比如 URLRewriteFilter 。只需将其映射到 *.xhtml然后转发至/xhtml/* .

类似于:

HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;

String ctx = request.getContextPath();
String uri = request.getRequestURI();
String viewId = uri.substring(ctx.length(), uri.length());

if (viewId.startsWith("/xhtml")) {
// Redirect to URL without /xhtml (changes URL in browser address bar).
response.setStatus(301);
response.setHeader("Location", ctx + viewId.substring("/xhtml".length());
// Don't use response.sendRedirect() as it does a temporary redirect (302).
} else {
// Forward to the real location (doesn't change URL in browser address bar).
request.getRequestDispatcher("/xhtml" + viewId).forward(request, response);
}

但更简单的方法是更改​​目录层次结构以摆脱 /xhtml子文件夹。这些 CSS/JS(和图像)文件最好放置在 /resources 中。子文件夹,以便您可以利用 <h:outputStylesheet> 的功能, <h:outputScript><h:graphicImage>以适当的方式。

另请参阅:

关于java - 在 JSF 中,我可以在 URL 中隐藏 XHTML 文件的部分目录层次结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8589051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com