Java Web不能不懂的知识

1、传说中java的class文件可以一次编译到处运行,那么源代码采用GBK还是UTF-8会有影响么?

不会有影响。

因为Java源代码通过编译后,生成的class文件为字节码。它可以被看作是包含一个执行程序的二进制文件,需要在JVM进行执行。

而GBK、UTF-8等为字符编码格式,针对的是字符,如Java源代码,中文,英文等文字。

2、如果lib有2个不同版本的jar,例如spring2.5,spring3,还能安心干活么?

可能会引起jar包冲突。

Tomcat下Jar包加载顺序:

1. $java_home/lib 目录下的java核心api 

2. $java_home/lib/ext 目录下的java扩展jar包

3. java -classpath/-Djava.class.path所指的目录下的类与jar包

4. $CATALINA_HOME/common目录下按照文件夹的顺序从上往下依次加载

5. $CATALINA_HOME/server目录下按照文件夹的顺序从上往下依次加载

6. $CATALINA_BASE/shared目录下按照文件夹的顺序从上往下依次加载

7. 我们的项目路径/WEB-INF/classes下的class文件

8. 我们的项目路径/WEB-INF/lib下的jar文件

在同一个文件夹下,jar包是按顺序从上到下依次加载
由ClassLoader的双亲委托模式加载机制我们可以知道,假设两个包名和类名完全相同的class文件不再同一个
jar包,如果一个class文件已经被加载java虚拟机里了,那么后面的相同的class文件就不会被加载了。

3、如果classes有个class文件不小心被打到jar包去,遗忘在lib目录,以后更新classes会不会炸了?

不会有影响,因为class文件会先加载。当新的class文件更新至classes文件夹内以后会被先读取。

4、log4j.xml放到conf目录会有问题么? 有什么区别没有?

log4j启动时,默认会寻找source folder下的log4j.xml配置文件,若没有,会寻找log4j.properties文件,加载配置。配置文件放置位置正确,不用在程序中手动加载log4j配置文件。如果将配置文件放到了config文件夹下,在build Path中设置下就好了。

读取路径改为:

PropertyConfigurator.configure("config/log4j.properties");

5、有人写了个Niubility的类放在yy.war, 为什么我就调用不到呢,明明同一个猫上跑的?

Tomcat不支持跨应用调用类,但是允许跨应用访问数据。在tomcat下,context元素有一个crossContext属性,如果配置为true,则可以实现在同一个tomcat下的多个web应用之间实现ServletContext对象访问。

6、听说有servlet3支持异步可厉害了,但放个demo到tomcat6会挂了,我lib明明有高大上的servlet-api.jar?

7、听说web.xml里边可以配置监听器listener,但它监听什么?

Servlet的监听器Listener,它实现了javax.servlet.ServletContextListener 接口,由服务器端程序实现相关业务逻辑,包括做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。

随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。也就是说,它能捕捉到服务器的启动和停止,在启动和停止触发里面的方法做相应的操作!
它必须在web.xml 中配置才能使用。

web.xml 的加载顺序是:context-param -> listener -> filter -> servlet

8、为什么不建议把jsp放在war的根目录下?

因为war的根目录下文件可以直接通过url直接进行访问。那么用户可以在不具备权限的情况下,可以对jsp文件进行访问,看到部分相关内容。

原文地址:https://www.cnblogs.com/liuyp-ken/p/10192255.html