不少人觉得将JSP文件修改之后,刷新页面便能够马上瞧见效果,然而实际情形常常存有几秒的延迟,这背后实际上是JSP引擎默认的缓存机制在发挥作用。
JSP热部署的缓存机制
第一次被访问时,JSP页面会被服务器编译成Servlet,为提高性能,Tomcat等服务器会缓存这个编译后的结果,默认情况下,此缓存会持续几秒钟,在这期间若再次访问同一个JSP页面,服务器会直接用缓存内容而非检查源文件是否被修改。
这个用来缓存的时间呢,一般来讲是能够进行配置的哟,举个例子讲的话,在那个Tomcat里面呀,是能够借由去修改web.xml当中的checkInterval参数进而实现调整处理的呢。要是你把处于开发环境之际的这个数值设成了负数状态呀,服务器便会在每一回执行请求操作的时候都去核查JSP有没有更新哟,通过这种方式由此达成名副其实的“热部署”功能哇,然而这样做的话呢,是会明显提升服务器所承担的负载情况的呢 。
为何不是严格实时生效
在性能考量方面,默认的缓存延迟是主要因素。就生产环境而言,JSP文件改动频率不高,每次请求时若都开展编译检查,会耗费大量CPU资源。所以,几秒的缓存是一种在开发便利性与之系统性能中间达成的折中办法。
这个机制所意味的是,开发者于保存文件之后马上刷新浏览器,然而看到的有可能依旧是旧页面。你得等待缓存过期(就像默认的4秒那般),或者手动将服务器的工作目录下面的编译缓存文件清除掉,新的改动才会产生效果,这之后呈现出应有的变化 。
Web.xml配置不当的常见问题
有时,问题并非出在缓存那儿,而是配置有误。比如说,在“web.xml”里,要是把具体某个Servlet或者某个过滤器的URL模式设定为“/*”,那么它会拦截掉所有的请求,这里面涵盖了对“.jsp”文件的请求。当这个过滤器处理得不够恰当的时候,就极有可能把JSP文件当作普通文本发送到浏览器 。
于这般情形之下,浏览器所呈现的并非页面效果这一状况,却是JSP的源代码。其解决途径乃为审慎详查web.xml,要确保针对静态资源以及JSP页面所发起的请求,未曾遭受错误的过滤器或者Servlet的截留,一般而言,是需要去为静态资源配置专门的访问路径的。
开发中的典型页面跳转流程
于一个典型的、基于JSP的MVC项目里,就像一个图书管理系统那般,页面跳转的逻辑是极为关键的。以用户信息的查询作为例子而言,当用户点击链接之后,请求首先会抵达Servlet(也就是控制器),控制器会调用Service层来处理业务,Service接着会借助DAO层从数据库那儿获取数据。
取得数据之后,结果会顺着原本的路径返回,DAO层把数据给予Service层,Service层进行处理之后再返回给Servlet,最后,Servlet把数据放置到请求作用域里,并且转发到相应的JSP显示页面(像userList.jsp),由JSP页面负责去渲染数据并呈现给使用者。
增删改查操作的后台逻辑实现
针对插入行为而言,其流程开端于由用户自行进行表单填写的JSP页面 ,待提交之后 ,数据转而被发送至处于后台的Servlet ,当Servlet获取之后的参数并开展校验工作 ,而后进而去调用Service层 , Service层随后再去致电进而让DAO层负责运行具体的SQL插入语句 .
在操作被完成之后,Servlet是会依据执行的结果究竟是成功状态还是失败状态,把不一样的提示信息放置到请求当中的,并且会转发至一个名为结果提示页面的地方也就是类似info.jsp这样的文件,该页面对操作结果予以显示之后,一般来讲会借助一段JavaScript代码, 在几秒后自动地跳转回到用户列表页那里,以此达成流程闭环句号。
从源码到理解的建议
在阅读项目源码之际,要是代码数量非常多,那就没必要着急依照每一行去理解。建议首先把握住核心的运行流程,像一种删除行为怎样从前端位置进行点击,经过控制器、业务层面、数据层面,最终抵达数据库,之后又把结果返还给前端 。
捋顺了这条主要线索,再关联数据库表结构,便能够迅速领会整个项目的架构以及代码意思。随后,能够下载完整的源码与数据库,在本地环境里进行部署运行,借助调试去观察数据的流转,这是深入明白JSP项目最具成效的办法。
在 JSP 开发期间,你有没有碰到过这种状况,即修改了相应文件可是却长时间都不发生生效的情形呢,最终又是采用怎样的方式解决的呀,欢迎处在评论区去分享属于你的经验以及各种技巧哦,要是感觉这篇文章具备一定帮助作用的话,也请通过点赞给予支持哟 。




