我在M1 Mac上的spring Boot 3.2.0中使用JSP(请不要提到Thymeleaf.),我发现如果我连续更新同一个JSP文件,重新编译不会立即发生,浏览器中显示的页面也不会更新。如果我等待,比如说,5秒,就会发生。
所以,我是说,
When I update a JSP file and immediately access it:
↓
(The page is recompiled and updated, then I wait a few seconds)
↓
Update JSP, immediate access again
↓
(The page is recompiled and updated)
字符串
但是,如果我不做任何间隔:
Update JSP, immediate access
↓
(The page is recompiled and updated, and then immediately again)
↓
Update JSP, immediate access
↓
(The recompilation does not happen and the page is not updated...)
型
就是这样
有什么设置可以解决这个问题吗?
以下是视图index.jsp
:
<!DOCTYPE html>
<html>
<head></head>
<body>
hello world
</body>
</html>
型
控制器:
package com.example.mysite.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class RootController {
@GetMapping
public String index() {
return "index";
}
}
型application.properties
:
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
# These don't work
# server.jsp-servlet.init-parameters.modificationTestInterval=0
# server.jsp-servlet.init-parameters.development=true
型
编辑
这里有更多的细节和信息。
我尝试创建一个最小情况。下面是代码及其行为(请参阅附带的behavior
视频):https://fastupload.io/grsd2af5JAQE9ql/file
从从IntelliJ创建一个spring Boot 项目开始,
pom.xml
个application.properties
个RootController.java
个index.jsp
个
是唯一更新的文件
我注意到,在视频中,即使是第一次编辑也没有立即显示在浏览器上..
2条答案
按热度按时间c7rzv4ha1#
您指出以下属性在您的情况下不起作用
字符串
根据当前(so 3.2)文档,
init-parameters
的属性前缀是server.servlet.jsp.init-parameters.*
。所以你应该试着
型
Tomcat的documentation属性集的提取:
碧玉是否用于开发模式?如果为true,则可以通过modificationTestInterval参数指定检查JSP修改的频率。true或false,默认值为true。
在SpringBoot中,默认情况下,此属性被重写为
false
(参见org.springframework.boot.web.servlet.server.Jsp.Jsp()
构造函数,其中他们将development
的init-parameter添加到false
)使JSP(及其依赖文件)在指定的时间间隔(以秒为单位)内(从上次检查JSP是否修改开始)不进行修改检查。值为0将使每次访问时检查JSP。仅在开发模式下使用。默认值为4秒。
如果您已经有了springboot-devtools,
server.servlet.jsp.init-parameters.development
参数已经设置为true
,以避免处理开发模式和生产模式配置属性(参考此处)您还应该检查排除资源文档,以免在更改JSP文件时触发spring-boot devtools的完全重启
默认情况下,更改/META-INF/maven、/META-INF/resources、/resources、/static、/public或/templates中的资源不会触发重新启动,但会触发实时重新加载。
EDIT通过添加以下属性,您还可以在Tomcat中禁用内部缓存,并且您的JSP应该始终保持最新:
型
wz8daaqr2#
有一个属性可以在Tomcat服务器的嵌入式示例上配置
JSPServlet
,该属性默认情况下在spring-boot
中使用spring-boot-starter-web
依赖项。modificationTestInterval
属性默认设置为4秒。这是等待JSP下一次修改的时间。请参阅官方的Tomcat文档Jasper 2 JSP Engine How To。需要两个参数:
modificationTestInterval
-导致在指定的时间间隔(以秒为单位)内不检查JSP(及其依赖文件)的修改,该时间间隔是从上次检查JSP的修改开始算起的。值为0将导致每次访问时都检查JSP。仅在开发模式下使用。默认值为4秒。development
-碧玉是否用于开发模式?如果是true
,检查JSP是否修改的频率可以通过modificationTestInterval
参数指定。true
或false
,默认值为true
。因此,您可以按如下方式更改嵌入式Tomcat的默认配置
字符串
您应该在Sping Boot 中检查Tomcat是否默认以
developer
模式运行。如果您正在寻找在Sping Boot 中修改嵌入式Tomcat选项的方法,请参阅SpringBoot Embedded Tomcat JSPServlet Options。
你可以只添加参数到你的
application.properties
文件所描述的here寻找:
型