从servlet重定向到jsp页面时,JavaScript无法工作。

3

我有一个servlet,使用requestdispatcher()进行转发到我的jsp页面之一

request.getRequestDispatcher("/WEB-INF/view/mypage.jsp").forward(
                    request, response);

目标页面mypage.jsp有一些jQuery特性需要进行一些显示/隐藏操作,但由于某种原因,在从servlet转发后显示jsp时,jQuery未被触发,但当我通过地址栏直接访问页面时(将页面放在web-inf之外以直接访问),它可以正常工作。

即使是简单的<body onload="alert('Testing')">也不起作用。 我在jsp中还使用了HTML5和jquerymobile

任何回复来填补我的知识空白都将是很好的。 谢谢

以下是我的jsp页面:

<!DOCTYPE html>
<html>
<head>
<title>My App</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css" />
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>
</head>
<body onload="alert('Even this is not popping up')">
-- Stuff--
</body>
</html>
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>
</head>
<body onload="alert('Even this is not popping up')">
-- Stuff--
</body>
</html>

非常不寻常。当您直接打开mypage.jsp时会发生什么? - kishu27
当直接访问时,它可以完美地工作... - Vic
你能发布mypage.jsp的代码吗? - kishu27
你不能直接从Web浏览器访问/WEB-INF - Hardik Mishra
为了直接访问该页面,我将其放置在Web内容文件夹中...而不是通过Web-inf访问它。 - Vic
显示剩余2条评论
5个回答

1

问题可能出在您访问mypage.jsp的方式上。由于它位于/WEB-INF文件夹内,因此无法直接从浏览器访问。如果它仍然在/WEB-INF文件夹中,则我认为您无法通过地址栏直接访问该页面。

如果您是从/WEB-INF外部访问它并且它有效,但在您的servlet将请求转发到它之后,它不起作用,则最有可能的原因是您的JSP页面尝试在发送到浏览器后加载某些内容,而服务器拒绝提供服务-也许该资源也在/WEB/INF内。您还可以找到this链接有帮助。


谢谢回复,我将页面放在了web-inf之外以直接访问(在问题中也已更新)。实际上,我的jsp页面正在尝试访问一些位于web-inf中的脚本和css...我会看看是否出了问题并进行更新。 - Vic
所以我把所有脚本/ CSS 的路径都更改为直接通过网络访问,但仍然无法正常工作...而且如果我不使用jquerymobile脚本,JavaScript 就可以正常工作...这可能是个问题吗?还是有其他更大的问题? - Vic
我删除了您发布的JSP中的冗余部分(仍保留两个JavaScript不变),并测试了从我的机器上的Servlet向其转发请求。无论我将JSP放在/WEB-INF内还是直接放在应用程序的根目录下,它都完美地工作。 - dragon66

0

我认为如果您在直接访问和间接访问时访问页面并查看源代码,您会发现问题所在。 使用文件差异工具比较两个输出。 最可能的是您在其中一个版本中未包含某些JavaScript,或者在间接访问时jquery.js库的相对路径不正确。


0

RequestDispatcher是一种重定向,类似于include的工作方式,因此您的页面可能正在提供服务,但静态文件将无法访问,因为它们是由前端请求的。

将您的js文件移出WEB-INF,css和图像也是如此。


0

0

使用方法如下

window.alert("This is alert");

window.document.location.href="mypage.html";

当您点击“确定”按钮时,将出现警报,并将重定向到您想要的页面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接