问题

如果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中读取实时更新的本地文件,本身也是不值得提倡的?更好的方式可能是直接传值,而非用读写文件的方式中转。

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

  1. JavaWeb项目生成PDF文件添加水印图片并导出

    一.前言 首先需要在Maven中添加相应的jar包依赖,若项目没用到Maven,也可自行下载相应所需的jar包(itextpdf.jar 与 itext-asian.jar),如下图所示.点此下载 M ...

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

    在有些时候,我们往往从github或者gitlab或者coding上面直接下载项目下来运行,但是这种情况往往没有使用git远程拉取来的安全(或者叫装逼), 所以这里我以gitLab为例子,说一下如何将 ...

  3. 使用IDEA创建JavaWeb项目 部署本地tomcat并运行

    一.下载商业版IDEA 官方链接:https://www.jetbrains.com/idea/download/#section=windows 二.新建JavaWeb项目 1.在菜单栏找到File ...

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

    在spring boot使用的过程中, 发现我修改了静态文件, 前台刷新后, 没有任何变化, 必须重新启动, 才能看到, 这简直不能让人接受. 那有什么方法来解决这个问题呢. Baidu之后, 得到了 ...

  5. C#控制台项目更改运行文件

    这个是极光推送的C# demo,里面有几个文件,要先后运行.这是第一次遇见,所以一下子找不到北,摸索了好一会儿才知会.于是做了这面一个记录. 右击鼠标,查看属性弹出这个这面,然后选择要启动的对象.保存 ...

  6. JavaWeb项目中各个文件夹的作用

    /WEB-INF/web.xml Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则. /WEB-INF/classes/ 包含了站点所有用的 class 文件,包括 se ...

  7. javaweb项目中的文件上传下载功能的实现

    框架是基于spring+myBatis的. 前台页面的部分代码: <form action="${ctx}/file/upLoadFile.do"method="p ...

  8. Mac下Intellij IDea发布JavaWeb项目 详解三 (为所有Module配置Tomcat Deployment 并测试web 网页 配置Servlet)

    step4 为所有项目配置Deployment 4.1 如图 4.2 [+][Artifact] 4.3 将这里列出的所有内容选中后,点[OK] 4.4 选完是这样,表示,这三个java ee 项目会 ...

  9. 7-将本地的javaweb项目部署到Linux服务器的一般操作

    一.基本流程介绍: 1.安装tomcat;2.安装mysql;3.将本地的javaweb导出成.war文件,传到服务器的tomcat/webapps/下面4.将数据库文件导出成.sql文件,传到服务器 ...

随机推荐

  1. 题解报告:hdu 1171 Big Event in HDU(多重背包)

    Problem Description Nowadays, we all know that Computer College is the biggest department in HDU. Bu ...

  2. 438 Find All Anagrams in a String 找出字符串中所有的变位词

    详见:https://leetcode.com/problems/find-all-anagrams-in-a-string/description/ C++: class Solution { pu ...

  3. Matrix Transformation codechef 数学题

    https://www.codechef.com/problems/MTRNSFRM 我只能说codechef的题好劲爆,这题居然是easy的题,太可怕了.而且还有一点就是codechef的题解很难看 ...

  4. AJPFX:关于面向对象及java的一些机制的思考

    1.变量的作用域和生命周期什么关系? 2.java除了在类体和方法体(包括参数)中可以声明变量外,其他位置一定不可以声明变量吗?比如高级别的应用里是不是有例外呢? 3.java源文件中代码的组织方式一 ...

  5. 【CSS】3种CSS方法设置元素垂直水平居中

    1. 宽高固定 设置要水平垂直居中的 div 的 position 为 absolute,left:50%; margin-left为负的这个元素宽度的一半,同理,top:50%;margin-top ...

  6. Python学习 Day 2-数据类型和变量

    数据类型和变量 在Python中,能够直接处理的数据类型有以下几种: 整数 Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080, ...

  7. cp - 复制文件和目录

    总览 cp [选项] 文件路径 cp [选项] 文件...目录 POSIX 选项: [-fipRr] GNU 参数(最短形式): [-abdfilprsuvxPR] [-S SUFFIX] [-V { ...

  8. ALTER TABLE - 修改表的定义

    SYNOPSIS ALTER TABLE [ ONLY ] name [ * ] ADD [ COLUMN ] column type [ column_constraint [ ... ] ] AL ...

  9. CE工具里自带的学习工具--第五关

    图解: 此时会弹出一个对话框,选择是就可以了,最终会看到:

  10. D1. Toy Train (Simplified)

    D1. Toy Train (Simplified) time limit per test 2 seconds memory limit per test 256 megabytes input s ...