JSP坑一则

/ 0评 / 0

坑深度:≥8h

具体问题:eclipse+tomcat的jsp工程无法正确导入同一workspace、不同project下的包。

关于【eclipse import package for jsp project】的疑问,在Google和Baidu上都门客罗雀。它们最多告诉你要在Properties里设置好Java Build Path和Web Deployment Assembly,以及jsp import的正确姿势是<%@ page import = "包名" %>。却鲜有人告诉你tomcat是如何识别和加载package的。因此一旦遇到些奇怪的问题,花上好几个小时都不令人意外。

首先要明确jsp编译执行的大概流程。首先程序员写好JSP源代码。接着在页面被访问时,tomcat将JSP文件转换为Java源代码(.java文件),再编译成.class文件,加载到servlet容器中。最终处理用户请求的并不是你编写的JSP文件而是JSP生成的Java程序。

接着如果要引入其他的Java包呢?从JSP import的代码来看,显然是通过一种类似反射的机制来加载的。那么既然类的引入延迟到了运行时,就意味着运行时环境要有一种手段来找到类的代码文件。这个过程必然有一个定义的或固定的路径支持。

tomcat在ROOT/WEB-INF文件夹下搜索动态加载的文件。一般来说,JSP文件位于ROOT下,而tomcat在处理请求时就会到ROOT/WEN-INF下查找需要的包。这其中包括了class文件(在ROOT/WEB-INF/class中)和jar文件(在ROOT/WEB-INF/lib)中。因此想要正确地使用其他的包,就要把包本体和包依赖的包放到WEB-INF中(自带的除外),否则会报Cannot be resolved to a type。

发表评论

邮箱地址不会被公开。 必填项已用*标注