同一个目录下不能用window.open打开页面

时间:2022-03-14 17:25:41
项目中的目录树如下:
WebRoot
  WEB-INF
    pages
      config
        a.jsp
        b.jsp
我的两个jsp页面如上所示,我在a.jsp里面包含了window.open('b.jsp'),但总是报404错误,按理说是没有问题的。为了测试,我在桌面上建立了两个页面c.html和d.html,在c.html中包含window.open('d.html'),没有问题,能够打开d.html。可为什么在项目里的同一路径下就不行呢?

19 个解决方案

#1


WebRoot
  |--WEB-INF
     |--pages
        |--config
           |--a.jsp
           |--b.jsp

#2


WebRoot
  |--WEB-INF
    |--pages
    |--config
      |--a.jsp
      | --b.jsp

#3


WebRoot
  |--WEB-INF
    |--pages
    |--config
      |--a.jsp
      |--b.jsp
应该是这样的目录结构

#4


嗯? window.open()是JS中用的吧

#5


引用 4 楼 lrbyantai 的回复:
嗯? window.open()是JS中用的吧

对的,在jsp里面用的js片段,里面有个方法内容是window.open

#6


应该是能打开html,我觉得window.open()中的参数中如果是jsp的话,不会被编译,所以会报404错误

#7


我也换个方式试了一下,a是jsp,  b是html,纯文本,但还是报404

#8


没有遇到这样的问题
确定服务器端的程序两个页面是在同路径下吗?
无论是JSP或者HTML都是可以的

#9


偶刚才试了一下,看来光靠想是不行的。我的是可以的
我a.jsp和b.jsp建在根目录下
a.jsp中加入一行代码如下:
  <script type="text/javascript">window.open("b.jsp")</script>

这样在a.jsp刷出来的时候,b.jsp就会弹窗口了 我试过,是可以的

#10


引用 8 楼 byl0516 的回复:
没有遇到这样的问题
确定服务器端的程序两个页面是在同路径下吗?
无论是JSP或者HTML都是可以的

我非常确定是同一路径。

另外再补充一下,window.open打开后,路径显示是http://localhost:8080/ProjectName/b.html

#11


由于CSDN编辑器的问题,目录层级不好表示。就是WebRoot下面有WEB-INF,WEB-INF下面有pages,pages下面有config,最后config文件夹里面是a.jsp和b.html

#12


呃 偶试了一下,有IE下是弹窗,在FF下是打开一个新的标签页 木有问题

#13


但window.open打开后显示路径是http://localhost:8080/ProjectName/b.html,所以报404

#14


引用 11 楼 xukunddp 的回复:
由于CSDN编辑器的问题,目录层级不好表示。就是WebRoot下面有WEB-INF,WEB-INF下面有pages,pages下面有config,最后config文件夹里面是a.jsp和b.html

汗咧  我把jsp放到web-inf文件夹下都访问不到,你是怎么做到的? 
估计你的a.jsp也是404吧

#15


引用 14 楼 lrbyantai 的回复:
引用 11 楼 xukunddp 的回复:

由于CSDN编辑器的问题,目录层级不好表示。就是WebRoot下面有WEB-INF,WEB-INF下面有pages,pages下面有config,最后config文件夹里面是a.jsp和b.html

汗咧  我把jsp放到web-inf文件夹下都访问不到,你是怎么做到的?
估计你的a.jsp也是404吧

首先我的a.jsp没有问题,能够访问。其次,jsp的位置只要在WebRoot根目录下就ok,与WEB-INF的位置没有关系。至少我的a.jsp就是放在WEB-INF下,且能够访问。

#16


学习一下子。。

#17


WEB-INF下的东西不能外部访问,
没做特殊处理window.open不能访问WEB-INF下的任何资源。
可以用普通的html引进该页,

<%@ include file="WEB-INF/pages/yourPage.jsp" %>  

也可以使用过滤器返回该资源。
方法有很多,拜访一下GOOGLE老师

#18


引用 17 楼 ousyuryu 的回复:
WEB-INF下的东西不能外部访问,
没做特殊处理window.open不能访问WEB-INF下的任何资源。
可以用普通的html引进该页,
Java code

<%@ include file="WEB-INF/pages/yourPage.jsp" %>  


也可以使用过滤器返回该资源。
方法有很多,拜访一下GOOGLE老师


我又试了一下,你说的还是有道理。当我把我的b.html放在了WebRoot根目录下,才成功的。btw,我正在维护原来的项目,原来所有的jsp都放在WEB-INF下的不同文件夹中,如果像你说的这种情况,那且不是不能在这个项目中用window.open了?

#19


谢谢各位,解决了。原来是window.open('b.jsp'),由于像17楼所说”window.open不能访问WEB-INF下的任何资源“,所以失败。现在换了下用window.open('b.action'),然后在struts.xml配置,b.action映射到/WEB-INF/pages/config/b.jsp,所以即使在WEB-INF下面也可以用window.open

#1


WebRoot
  |--WEB-INF
     |--pages
        |--config
           |--a.jsp
           |--b.jsp

#2


WebRoot
  |--WEB-INF
    |--pages
    |--config
      |--a.jsp
      | --b.jsp

#3


WebRoot
  |--WEB-INF
    |--pages
    |--config
      |--a.jsp
      |--b.jsp
应该是这样的目录结构

#4


嗯? window.open()是JS中用的吧

#5


引用 4 楼 lrbyantai 的回复:
嗯? window.open()是JS中用的吧

对的,在jsp里面用的js片段,里面有个方法内容是window.open

#6


应该是能打开html,我觉得window.open()中的参数中如果是jsp的话,不会被编译,所以会报404错误

#7


我也换个方式试了一下,a是jsp,  b是html,纯文本,但还是报404

#8


没有遇到这样的问题
确定服务器端的程序两个页面是在同路径下吗?
无论是JSP或者HTML都是可以的

#9


偶刚才试了一下,看来光靠想是不行的。我的是可以的
我a.jsp和b.jsp建在根目录下
a.jsp中加入一行代码如下:
  <script type="text/javascript">window.open("b.jsp")</script>

这样在a.jsp刷出来的时候,b.jsp就会弹窗口了 我试过,是可以的

#10


引用 8 楼 byl0516 的回复:
没有遇到这样的问题
确定服务器端的程序两个页面是在同路径下吗?
无论是JSP或者HTML都是可以的

我非常确定是同一路径。

另外再补充一下,window.open打开后,路径显示是http://localhost:8080/ProjectName/b.html

#11


由于CSDN编辑器的问题,目录层级不好表示。就是WebRoot下面有WEB-INF,WEB-INF下面有pages,pages下面有config,最后config文件夹里面是a.jsp和b.html

#12


呃 偶试了一下,有IE下是弹窗,在FF下是打开一个新的标签页 木有问题

#13


但window.open打开后显示路径是http://localhost:8080/ProjectName/b.html,所以报404

#14


引用 11 楼 xukunddp 的回复:
由于CSDN编辑器的问题,目录层级不好表示。就是WebRoot下面有WEB-INF,WEB-INF下面有pages,pages下面有config,最后config文件夹里面是a.jsp和b.html

汗咧  我把jsp放到web-inf文件夹下都访问不到,你是怎么做到的? 
估计你的a.jsp也是404吧

#15


引用 14 楼 lrbyantai 的回复:
引用 11 楼 xukunddp 的回复:

由于CSDN编辑器的问题,目录层级不好表示。就是WebRoot下面有WEB-INF,WEB-INF下面有pages,pages下面有config,最后config文件夹里面是a.jsp和b.html

汗咧  我把jsp放到web-inf文件夹下都访问不到,你是怎么做到的?
估计你的a.jsp也是404吧

首先我的a.jsp没有问题,能够访问。其次,jsp的位置只要在WebRoot根目录下就ok,与WEB-INF的位置没有关系。至少我的a.jsp就是放在WEB-INF下,且能够访问。

#16


学习一下子。。

#17


WEB-INF下的东西不能外部访问,
没做特殊处理window.open不能访问WEB-INF下的任何资源。
可以用普通的html引进该页,

<%@ include file="WEB-INF/pages/yourPage.jsp" %>  

也可以使用过滤器返回该资源。
方法有很多,拜访一下GOOGLE老师

#18


引用 17 楼 ousyuryu 的回复:
WEB-INF下的东西不能外部访问,
没做特殊处理window.open不能访问WEB-INF下的任何资源。
可以用普通的html引进该页,
Java code

<%@ include file="WEB-INF/pages/yourPage.jsp" %>  


也可以使用过滤器返回该资源。
方法有很多,拜访一下GOOGLE老师


我又试了一下,你说的还是有道理。当我把我的b.html放在了WebRoot根目录下,才成功的。btw,我正在维护原来的项目,原来所有的jsp都放在WEB-INF下的不同文件夹中,如果像你说的这种情况,那且不是不能在这个项目中用window.open了?

#19


谢谢各位,解决了。原来是window.open('b.jsp'),由于像17楼所说”window.open不能访问WEB-INF下的任何资源“,所以失败。现在换了下用window.open('b.action'),然后在struts.xml配置,b.action映射到/WEB-INF/pages/config/b.jsp,所以即使在WEB-INF下面也可以用window.open

#20