Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jsp中的基本路径_Jsp_Servlets_Path_Base - Fatal编程技术网

jsp中的基本路径

jsp中的基本路径,jsp,servlets,path,base,Jsp,Servlets,Path,Base,在我的应用程序中,我使用struts2,并创建一个基本操作来解决路径问题: class BaseAction{ private String path; static{ HttpServletRequest request = ServletActionContext.getRequest(); path=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getC

在我的应用程序中,我使用struts2,并创建一个基本操作来解决路径问题:

class BaseAction{
  private String path;
  static{
  HttpServletRequest request = ServletActionContext.getRequest(); path=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();+"/";
  }
}
然后,所有其他操作都会扩展此baseaction

在我的jsp页面中,我添加路径作为基础:

xx.jsp:

....
<head>
  <base href="<s:property value='path'/>">
  <script ... src="res/test.js" />
</head>
。。。。
它在我自己的机器上运行良好

test.js可通过以下方式找到“http://localhost:8080/app/res/test.js"

但当其他人尝试访问我的应用程序时,他们会使用:

现在,浏览器仍然尝试通过下载test.js "http://localhost:8080/app/res/test.js"

当然,它不能得到它。真正的路径应该是:


由于“路径”在操作中是硬代码,有没有办法解决这个问题?

静态
初始化块中,我不希望您有可用的请求。我会:

<base href="${request.contextPath}" />

静态
初始化块中,我不希望您有可用的请求。我会:

<base href="${request.contextPath}" />

您正在基本路径中设置本地主机和端口,而不是远程主机和端口

这毕竟不是创建基本路径的好构造。我建议按如下方式创建它:

path = request.getRequestURL().toString().replace(request.getRequestURI(), request.getContextPath()) + "/";
或者只是很好地使用JSTL/EL

<c:set var="r" value="${pageContext.request}" />
<base href="${fn:replace(r.requestURL, r.requestURI, r.contextPath)}/" />

您正在基本路径中设置本地主机和端口,而不是远程主机和端口

这毕竟不是创建基本路径的好构造。我建议按如下方式创建它:

path = request.getRequestURL().toString().replace(request.getRequestURI(), request.getContextPath()) + "/";
或者只是很好地使用JSTL/EL

<c:set var="r" value="${pageContext.request}" />
<base href="${fn:replace(r.requestURL, r.requestURI, r.contextPath)}/" />

怎么样

<base href="${pageContext.request.contextPath}" />

怎么样

<base href="${pageContext.request.contextPath}" />



您能否验证其他人看到的HTML中的基本href是否正确?从静态初始值设定项访问Servlet上下文或请求似乎是自找麻烦。。。。正如从静态初始值设定项设置实例变量一样。这是如何编译的?在其他人看到的html页面中,base href仍然是“”,您能验证其他人看到的html中的base href是否正确吗?从静态初始值设定项访问Servlet上下文或请求似乎是自找麻烦。。。。正如从静态初始值设定项设置实例变量一样。这是如何编译的?在其他人看到的html页面中,基本href仍然是“”@hguser-我想我的答案仍然适用。谢谢,我明天会尝试一下。你是对的,我不应该在静态块中设置路径,它应该在每个请求中获得。@hguser-我想我的答案仍然适用。谢谢,我明天会试试。你是对的,我不应该在静态块中设置路径,它应该在每个请求中获得。你的意思是我不能使用静态块,我应该根据每个请求创建路径吗?我没有说过,我也不知道,因为我不做Struts2,但你至少告诉我它在本地工作,而不是远程工作,提取基路径的方法不正确(使用本地地址而不是远程地址),这确实证实了这种行为。你尝试过我的建议了吗?现在,我在家,明天我会尝试你的建议。:)你的意思是我不能使用静态块,我应该根据每个请求创建路径吗?我没有这么说,我也不知道,因为我不做Struts2,但你至少告诉我它在本地工作,而不是远程工作,这种行为确实通过提取基路径的错误方式得到证实(您使用的是本地地址而不是远程地址)。您是否尝试了我的建议?现在,我在家,明天我将尝试您的建议。:)