前言
我希望成为一名优秀的大数据开发,为此,我学了javaWeb
刚好最近老师那边找了一个外快,大体后端需求是:
统计web网页的访问人数,并反馈给前端,同时,完成云服务器购买,域名注册,网页的上线,下面我将我在本次项目中的遇到的一些坑写成博客,希望能帮到更多人。
问题描述:
windows下仅只有绝对路径可以访问到resouce下的文件,即使配置了pom文件扫描,也无法访问到resouce下的文件,linux下即使使用绝对路径也无法访问到文件。
一般来说,出现文件不存在错误的原因都是路径错误,建议首先检查您自己的路径,但我检查了很多次,我很肯定,我的路径没有问题,说明,问题原因不在这里,如果您所遇问题符合我对我所遇问题的描述,您可以试试我的办法
我最开始指定的路径方式如下:
// windows测试路径
String file = "D:\\JAVA\\java\\javaWeb\\src\\main\\resources\\count.txt";
// linux路径,其中resources//count.txt这个文件是在服务器上直接新建的
String file = "\\opt\\module\\tomcat8\\webapps\\resources\\count.txt"
// 注意,这是错误的代码,解决问题的方式在后面
感谢开源,让我不断成长。有望登临山巅。
软件:
阿里云服务器(centos7系统)、tomcat8、jdk1.8、idea2020
问题描述
总的来说,遇到的如下几个拦路虎,但是英勇的我最后把他们都ko了:
1、编码问题
项目的开发是在windows上进行的,因此在部署到服务器上进行测试的时候,使用了中文的地方就不可避免的出现了中文的乱码。
我的解决办法是在jsp文件顶部输入如下代码来指定其编码格式为UTF-8
<%@ page language="java" pageEncoding="utf-8"%>
注意:在jsp文件里面使用html声明编码方式的代码端是没有作用的
2、文件找不到
业务原理简介
考虑到服务器性能和客户的业务需求,我并没有使用数据库来完成浏览量的统计,而是采用了更简单的方式,IO流,以及tomcat服务器自带的监听器来完成,大致流程就是
session的销毁触发监听器的执行,监听器的执行会启动一条字节输入流和一条字节输出流。输入流读入用于计数的文件中统计的浏览量,然后加1,并由输出流写回文件里。
解决方法
使用如下代码,通过class类中提供的getResource方法去资源的路径然后就可以访问了
URL url = 类名.class.getResource("/");
String path = url.getPath();
File file = new File(path + "文件名");
这里类名的getResource(“/”)方法中返回的是一个带有file://的文件路径,操作系统是无法识别的,因此我们使用.getPath方法,使得返回值变成一个
/D…开头的路径
然后和你希望获取的文件名做一次拼接,再通过FileInputStream流去完成读入
FileInputStream fileInputStream = new FileInputStream(file);
这样就完成了,注意尽量不要使用直接给一个字符串路径的方式去获取这个文件。
具体原理浅查了一下资料有了一点头绪。如果能确定我的思路是正确的,后续会写一篇博文分享出来。
最后,如果这篇文章的内容有误,欢迎您留言并指出,我们一起解决。
也希望您能将分享您所遇到的问题,记录成长,帮助他人。