, 其中_header是这样定义的 JSP 字符串; // host will typically equal: uk.domain.-6ren">
gpt4 book ai didi

JSP - 在 c :import 中使用变量作为 url

转载 作者:行者123 更新时间:2023-12-01 10:27:43 25 4
gpt4 key购买 nike

有什么方法可以在 <c:import> 中使用变量? JSP 中的语句,例如: <c:import url="<%=_header%>"></c:import> , 其中_header是这样定义的 JSP 字符串;

// host will typically equal: uk.domain.com or fr.domain.com
String host = request.getServerName();
// cc is attempting to become the country code for the domain
String cc = host.substring(0, host.indexOf("."));

String _header = "http://assets.domain.com/" + cc + "/includes/header_" + cc + ".jsp";

我们在多个市场托管了多个网站。能够以这种方式定义一个模板将是理想的,因为这意味着对模板的更改更少。不幸的是每当包括<c:import url="<%=_header%>"></c:import>服务器加载页面失败。

但包括,例如: <c:import url="http://assets.domain.com/uk/includes/header_uk.jsp?market=<%=cc%>"></c:import> 似乎工作正常......

有什么想法吗?!


编辑: 结果是 <%=cc%> URL 中的 var 实际上不起作用。必须执行以下操作才能使其正常工作;

String cc = host.substring(0, host.indexOf("."));
session.setAttribute("cc", cc);

...

<c:import url="http://assets.domain.com/uk/includes/header_uk.jsp"><c:param name="market">${cc}</c:param></c:import>

仍然没有解决可变 URL 问题,但是...

最佳答案

您不能可靠地将 scriptlet 与 taglibs/EL 混合使用。它们运行在不同的时刻和范围。您应该选择使用其中之一。由于 scriptlet 的使用正式 discouraged自 JSP 2.0(2003 年 11 月发布)以来,我建议完全放弃它并继续使用 taglibs/EL。

以下脚本

<%
// host will typically equal: uk.domain.com or fr.domain.com
String host = request.getServerName();
// cc is attempting to become the country code for the domain
String cc = host.substring(0, host.indexOf("."));
%>

可以用下面的taglib/EL代替:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<c:set var="cc" value="${fn:split(pageContext.request.serverName, '.')[0]}" />

以便它在 EL 中作为 ${cc} 可用。

<c:import url="http://assets.domain.com/${cc}/includes/header_${cc}.jsp" />

关于JSP - 在 c :import 中使用变量作为 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6734546/

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