JavaWeb 项目,更改本地文件需刷新才有效问题 (tomcat相关)

问题

如果JavaWeb项目需要读取实时更新的本地文件内容,可能遇到必须在更新后手动refresh才能有效的问题。

原因

这是由于项目实际上是运行在Tomcat中,而非本地的工作目录。eclipse可以设置成将本地工作目录自动同步到Tomcat相应目录下,但是这需要一定时间。也就是说写好本地文件后,过了一会儿才能同步到Tomcat,前端真正读取的文件目录才能是更新后的结果。

解决方案一

网上的经典解决办法是将项目打包成war包,部署到Tomcat上运行(这样就不存在本地工作目录和实际运行目录不一致的情况了)。具体操作百度里很详细,但实际操作起来,不知是内存不够还是什么原因,Tomcat运行项目时总是闪退。

解决方案二(问题仍然存在,但有所改善)

问了老师,另一种可供参考解决的办法是,更新文件时不更新本地工作目录的文件,而是直接实际目录下更新。

那么问题来了,如何获得tomcat中运行的实际目录呢?

设置tomcat

首先确保tomcat设置如下图:

双击server中的tomcat(或右键打开),勾选如图选项:

代码查看tomcat路径

然后在任意jsp中加上如下java代码:

 <%
      System.out.println("tomcat绝对路径:"+request.getServletContext().getRealPath("/"));//获取到了,剩下就留给你自己思考了
      %>

运行该jsp后,在eclipse控制台即可查看tomcat绝对路径

问题其实仍然存在,但有所改善

结果是,更新所需的速度快了很多,但是频繁反复进入需要读写本地文件的页面时,仍然有更新不及时现象,甚至如果更改了代码,会出现报错。

初步推断,报错的原因是,修改了代码后,eclipse检测到本地工作目录有更新,于是自动将本地工作目录同步到tomcat。我们刚才把文件写在了tomcat而非本地,如果本地没有同名文件,则同步时tomcat中的该文件也会被删除。

但是我们代码本身就包含在tomcat中写该文件的步骤呀!结合更新不及时现象,可能是这段代码尚未完成,页面已经加载出来了,发现没有读到它要读的文件,于是就报错了。

如何控制保证页面加载的过程完全在写完文件后执行呢,可以把代码写在initJsp函数中(在HTML的外面),但是这样的缺点是jspInit函数中无法使用request。

</html>
<%!
public void jspInit()
{
    WriteHomepageJson.allMovies();
    WriteHomepageJson.latestComments(5);
    WriteHomepageJson.topMovies();
    System.out.println("init index.jsp !");
}
%>

可以说目前还没有找到完美的解决方法吧。是否javaweb中读取实时更新的本地文件,本身也是不值得提倡的?更好的方式可能是直接传值,而非用读写文件的方式中转。

原文地址:https://www.cnblogs.com/YuQiao0303/p/9277817.html

时间: 2024-10-11 12:58:47

JavaWeb 项目,更改本地文件需刷新才有效问题 (tomcat相关)的相关文章

解决无法更改本地文件夹与 TFS 项目之间映射的问题

问 题说明:更换了一台新的 TFS 服务器,旧的 TFS 服务器停止使用.但从客户端 VS2008 连接到新的服务器,并下载源码到本地原来工作的文件夹时,出现错误提示,说本地文件夹已被映射到了旧的服务器上,不能从新服务器获取源码.通过源代码管理 -工作区管理,把跟旧服务器相关的所有工作区项都删掉后,仍出现此提示. 解决办法:在文件 C:\Documents and Settings\当前用户\Local Settings\Application Data\Microsoft\Team Found

git中使用命令将远程仓库拉取项目在本地文件夹

在有些时候,我们往往从github或者gitlab或者coding上面直接下载项目下来运行,但是这种情况往往没有使用git远程拉取来的安全(或者叫装逼), 所以这里我以gitLab为例子,说一下如何将远程服务器上的代码拉取到本地   首先,你得安装好git的软件 可以从网上获取 安装教程点击链接:git安装教程 安装好后,打开你的远程仓库的网站,当然你得发现你的项目组或者找到开源项目的东东 比如我的 gitlab: 然后随便打开一个项目,复制SSH链接:   接下来就可以开始在黑框里面搞了: 打

springboot项目更改代码后实时刷新问题

在spring boot使用的过程中, 发现我修改了静态文件, 前台刷新后, 没有任何变化, 必须重新启动, 才能看到, 这简直不能让人接受. 那有什么方法来解决这个问题呢. Baidu之后, 得到了想要的答案, 在这里记录下来. 1. pom.xml 修改 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifac

配置虚拟目录,不同项目共享本地文件

上次做了个P2P项目,因为前台和后台分成了两个项目,所有前后台上传的文件怎么共享就成了一个问题,刚好我负责的用户中心模块的头像上传就遇到了这个问题,本来想的是用本地绝对路径,但发现jsp的img属性无法定义绝对路径,百度了一下找了个解决方案,分享给大家: 1.tomcat的conf目录下的.xml文件 2.找到<Host>配置,如下: 3.在Host中添加<Context>配置    eg: 4.访问时: --------------------------------------

JavaWeb项目导出Excel文件并弹出下载框

引言 在Java Web开发中经常涉及到报表,最近做的项目中需要实现将数据库中的数据显示为表格,并且实现导出为Excel文件的功能. 相关jar包 使用POI可以很好的解决Excel的导入和导出的问题,POI下载地址: poi-3.6-20091214.jar 关键代码 首先导入上述jar包. 在生成excel时一般数据源形式为一个List,下面把生成Excel格式的代码贴出来: /** * 以下为生成Excel操作 */ // 1.创建一个workbook,对应一个Excel文件 HSSFWo

Windows server2012如何运行Javaweb项目?

最近用java写了个小项目,想要部署到服务器,于是买了个Windows server2012,但是不知道怎么部署,后来才知道需要配置java运行环境.经过一番研究最终搞定了.下边是我的个人总结,由于是第一次部署服务器,所以有些地方不够完美. 第一步:安装jdk 下载 这个可以到oracle官网下载,下载步骤如下:https://jingyan.baidu.com/article/c1465413b54ec40bfcfc4cdd.html   最新版的oracle页面不是这样的,直接搜jdk,找到

PyQt4转换ui为py文件需添加如下代码才可执行

1)转换ui为py 命令行进入ui文件所在文件夹,输入pyuic4 ui_name.ui > py_name.py即可 或新建ui2py.bat文件,写入: @echo off @cd /d "%~dp0" pyuic4 %1 > %~n1.py 将ui文件拖入批处理即可,生成在ui文件所在目录,文件名为py_name.py 2)转换后的py文件还不能运行,需要可视化操作才可运行 具体见帖:http://www.cnblogs.com/doudongchun/p/36947

解决:电脑新建文件后需要刷新才显示

电脑不管是桌面文件,还是磁盘文件夹内的文件, 新建文件后都需要刷新才显示 解决: 电脑显卡问题  ,重新安装显卡 Nvidia显卡有一个服务停止了,NVIDIA Network Service服务 ,开启就正常了 .

Python脚本--批量更改本地md文件的图片链接

#-*- coding:utf-8 -*- import re import os def patch_md(filename): if filename.endswith('.md'): return True return False def _patch_replace(text): pattern=re.compile(r'(?<=!)\[.*\]\((.*)(?=\))') result = re.findall(pattern,text)for filedir in result: