头文件在jsp中一次又一次地重新加载

时间:2013-06-01 17:55:59

标签: css jsp java-ee header-files

My All Js和css在script.jsp文件中并包含在每个页面上

<jsp:include page="../include/scripts.jsp" />

当页面提交/刷新时一次又一次地重新加载?

如何控制?

2 个答案:

答案 0 :(得分:0)

以下是我发现可以解释的解释。当我需要它时,它帮助了我

这是对问题的解释......

单击表单上的“提交”按钮会向Web服务器发送请求,其中包括在表单上输入的所有数据。不仅URL而且表单数据也是请求的一部分,浏览器会记住此请求。如果用户单击“刷新”,浏览器将重复该请求,再次向Web服务器发送相同的URL和表单数据。

但是表单可以用两种不同的方式提交,GET或POST,具体取决于“form”标签的“method”属性。有一个约定,GET请求没有副作用;它只提取数据但不对数据库进行任何更改。另一方面,如果请求更改数据,则应始终使用POST请求。正如我所说,这些只是约定,它们之间没有太大的技术差异,但一个非常重要的区别是浏览器会在用户尝试重复POST时警告用户 - 点击“刷新”会弹出一个对话框警告用户这可能导致重复操作,并确认他们确实要重新提交。刷新GET请求时,浏览器不会显示此确认信息。

您的表单是否使用GET方法将其更改为POST是最简单的解决方案,因为这至少意味着如果用户尝试刷新,则会收到警告。

但更好的解决方案是@cletus提出的POST + REDIRECT + GET惯用法。这将数据库更新(POST)和视图(GET)分成两个操作。单击浏览器上的刷新然后只重复GET,它没有副作用。

答案 1 :(得分:0)

使用include指令<%@ include/>作为您现在使用的<jsp:include/>标记。

每次编译器遇到该标记时(第一次请求,刷新),

<jsp:include/>将指示jsp运行时去获取包含的资源,而<@ include/>表示包含的资源内置于编译时的父资源

不同之处在于该指令是一个编译时包含。这意味着指令的内容(在您的情况下是 scripts.jsp )被烘焙到父jsp(最终将编译为jsp的servlet)中。结果是,只有在第一次呈现父jsp时才会读取包含的文件。

你应该拥有什么:

    <%@ include page="../include/scripts.jsp" />

相关: