gpt4 book ai didi

java - 每个请求的上下文路径都可以改变吗?

转载 作者:行者123 更新时间:2023-11-28 23:29:17 27 4
gpt4 key购买 nike

我正在开发一个网络应用程序,但发生了一些非常奇怪的事情。我在本地 tomcat 上运行我的 JEE 应用程序,一切顺利。当我在线部署我的应用程序时(在 Heroku 或 Openshift 上),上下文路径会根据每个请求发生变化。例如,如果我单击一个链接,应用程序会正确显示我期望的内容,但从现在开始,上下文路径(我在 JSP 中用于生成链接)更改为当前 url。如果我将浏览器中的 url 修改为站点的主页,它会再次更改。可能是配置问题?我头疼。我正在使用 urlrewrite 来获得漂亮的 url,所以,如果我网站的主页是 http://homesite/ , 一篇文章在 http://homesite/article/year/month/article_slug .当我在主页上单击链接以查看文章时,页面会相应地发生变化。页面更改后,如果我单击菜单中的“主页”链接(使用 ${pageContext.request.contextPath} 生成),它会转到我已经到达的同一页面。在网站的每一页中,我都添加了一个 javascript 变量,如下所示:

<script type="text/javascript">
context = "<%=request.getContextPath()%>";
</script>

这里的 contextpath 总是空的,我相信它一定是空的。这是生成我网站主菜单的 JSP 的内容:

<nav class="red accent-4">
<div id="uc-nav-menu-container" class="nav-wrapper">
<!--<a href="#" class="brand-logo right">Unical Coin</a>-->
<a href="#" data-activates="mobile-demo" class="button-collapse left"><i class="material-icons">menu</i></a>
<ul id="nav-mobile" class="left hide-on-med-and-down">
<li class="active"><a href="${pageContext.request.contextPath}">Home</a></li>
<li><a href="#">Mission</a></li>
<li><a href="#">Tecnologia</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Links</a></li>
</ul>
<ul class="red accent-4 side-nav" id="mobile-demo">
<li class="active"><a href="${pageContext.request.contextPath}">Home</a></li>
<li><a class="white-text" href="#">Mission</a></li>
<li><a class="white-text" href="#">Tecnologia</a></li>
<li><a class="white-text" href="#">About</a></li>
<li><a class="white-text" href="#">Links</a></li>
</ul>
<div id="uc-user-menu-container" class="right"></div>
</div>
</nav>

这是生成文章页面的 JSP:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<jsp:include page="/WEB-INF/components/imports/default-head-imports.jsp"></jsp:include>
</head>
<body class="blue-grey lighten-5">
<jsp:include page="/WEB-INF/components/nav-menu.jsp"></jsp:include>
<div class="container">
<jsp:include page="/WEB-INF/components/single-article-content.jsp"></jsp:include>
</div>
<jsp:include page="/WEB-INF/components/footer.jsp"></jsp:include>
<jsp:include page="/WEB-INF/components/imports/default-foot-imports.jsp"></jsp:include>
</body>
</html>

每个页面中的javascript变量仅在包含的“/WEB-INF/components/imports/default-head-imports.jsp”中生成。

最佳答案

这里的问题是 ROOT 应用程序的上下文路径实际上是“”(空字符串)而不是 /如您所料。如果您以 ROOT 身​​份部署应用程序,您将获得如下所示的“主页”链接:

<li class="active"><a href="">Home</a></li>

因此,如果您单击该链接,您将最终到达当前页面。

如果你真的想转到当前上下文的根目录,你的链接需要像这样完成:

<li class="active"><a href="${pageContext.request.contextPath}/">Home</a></li>

注意尾随 /href 中扮演角色属性。

如果您要对用户进行身份验证,那么如果 cookie 不可用,您实际上还应该使用正确的链接编码来保留用户的 session :

<li class="active"><a href="$response.encodeURL("${pageContext.request.contextPath}/")">Home</a></li>

(这可能不是有效的 EL...我不是 EL 专家,但你明白了。)

哦,还有 /可能是一个“合法”的上下文路径,它不太可能给你你期望的结果。永远不要放 path<Context>元素,永远不要放 <Context> server.xml 中的元素除非你绝对必须。相反,使用 WAR 文件名或部署描述符 XML 文件名将上下文部署到所需路径,包括 ROOT如果您希望它成为根 Web 应用程序。

关于java - 每个请求的上下文路径都可以改变吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32758165/

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