在eclipse上写java web,当你发现你发布一个项目后,并没有在你已经添加的tomcat的webapps上发现该工程的目录,这是你就要检查一下自己的Server Locations了
这个界面,朋友们都是熟悉的,这个添加好的tomcat下现在部署了一个工程,现在我们双击tomcat v7.0
发现Server Locations无法修改,这时只需移除tomcat下的工程(刚刚提到的readFile)
可以修改了,如何修改呢?
按着上图的意思是,使用tomcat的安装目录作为发布的位置,然后下面的webapps就是我发布时的目录。
现在查看tomcat中的webapps
发布一下工程,再次查看,你就会发现工程已经到了你想要的webapps中。
现在来我们进入第二个环节:分析eclipse中的文件位置,与工程发布后文件的位置之间的关系
实验的环境如下:
打开其中一个图,其他是类似内容
可以看出3.properties实在项目根目录下
1.properties是在下图位置上
估计读者根据这两个图,已经可以猜到2与4.properties的位置了吧
规则:
在发布项目后,src下的java文件会被翻译成字节码文件WEB-INF\classes下,所以src下的文件也被发布到了WEB-INF\classes目录下,WebContent下的文件都会被发布到项目的根目录下,而下图中原本就在WEB-INF/file下的4.properties就还是在项目根目录下的WEB-INF/file下。
上面文件的位置的内容,我写的很详细,可能有些读者觉得过于详细,没有必要截图。我是这么想的,这些文件在工程发布后位置相对于项目的位置,我觉得是超级重要的,举几个例子吧,在jdbc中连接数据库的必要参数,驱动、账号、密码、以及一些需要的参数,这些东西都不可能直接写到代码中的,这样会导致很伤的硬编码。所以都是写在配置文件中(主要是.xml与.properties),
所以找文件变得很重要,在web中servlet中很容易就得到文件的绝对路径(这个绝对路径是根据工程发布的位置决定的,不是eclipse中的工作空间下的),所以是可行的。
下面是一段测试代码
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String realPath3 = context.getRealPath("3.properties");
System.out.println(realPath3);
}
控制台输出:
D:\Program Files\heiMaTomcat\apache-tomcat-7.0.52\webapps\readFile\3.properties
其他也是同理,既然位置找的清楚了,那么就可以来加载文件了
在读取src(classes) 下的资源是可以使用类加载器----专门加载classes 下的文件的
规则:
“类名”.class.getClassLoader().getResource("")定位到的绝对路径是WEB-INF\classes目录下。getResource(String filepath)。参数filepath是classes目录下的相对路径。
测试1:
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("1.properties");
Properties properties = new Properties();
properties.load(inputStream);
System.out.println(properties.getProperty("name"));
控制台:
1.lailai
测试2:
getResourceAsStream("/conf/2.properties");
控制台:
2.lailai
现在我们来说另外一种,加载文件的方式,我们前面说到了,我们都已经知道文件的绝对路径了,那么就可以使用输入流来加载文件
在servlet中很容易的得到ServletContext对象,通过这个对象就可以实现。
测试1
ServletContext context = this.getServletContext();//项目根目录
String path = "3.properties";
InputStream inputStream = context.getResourceAsStream(path);
Properties properties = new Properties();
properties.load(inputStream);
System.out.println(properties.getProperty("name"));
控制台:
3.lailai
测试2:
String path = "WEB-INF/classes/conf/2.properties";
InputStream inputStream = context.getResourceAsStream(path);
控制台:
2.lailai
通过上面的例子,读者估计已经完全掌握了,定位文件,读取配置文件中的内容。
相信我,学会配置文件,对你的普通项目,或者ssh,ssm项目都是有帮助的。
在这,可能有朋友要问了,前面提到配置文件一般是.propertie和.xml 那么问题来了,使用哪个合适呢?
我是这样用的,简单的键值对,像数据库连接的一些必要参数、后面在项目中的一些必要的属性与值,需要配置在文件中,防止硬编码的这些简单键值对就可以使用.properties.然后如果复杂的配置,servlet的配置路径与类的映射,spring的bean配置等等这些,复杂的配置,它都是使用.xml,但是这些配置你可以根据它的相关规则去配,是繁琐,不是难。
还有个需要提及的是,像properties读取属性的值(刚刚的name=1.laiali),那么.xml如何读取相关的信息呢?
这里我提供一个链接,是我之前模拟spring的ioc,也就是自己搞一个bean工厂为我生成管理对象的类,其中,就使用到了xml的解析
http://blog.csdn.net/lys1695227550/article/details/78088532
在这还是希望读者读完这篇文章,对自己在这方面会有更深的认识,有所收获,如果大家喜欢的话,关注我,文章还在编辑ing......