关于Tomcat7无法编译jsp页面的解决方法
来源:互联网 发布:优化驱动器多少遍 编辑:程序博客网 时间:2024/05/16 15:56
由于工作需要,要把外包给别的公司的项目发布到公司服务器上,本地测试全部通过,但是有一些在系统中没有用到的无关紧要的JSP页面有错误,这些错误时由于系统升级遗留下来的因为API换了导致的错误。
重点来了,本地测试好好的,发布到服务器上时,因为Tomcat无法编译部分系统用到的JSP页面,这下好了,一直显示无法加载类或是class文件不存在。错误截图如下:
在查看了Tomcat日志后,我发现了应用下的一个包没有被引入,而且这个包就是servlet-api.jar,以前遇到过这个包跟Tomcat自带的冲突导致程序运行不起来,所以我直接删了这个jar包,tomcat重启后页面正常访问。大功告成?No No No。在我满心欢喜的查看后台管理页面时,又发现了差不多一样的问题,请看截图:
哎 class文件未找到,这是怎么回事呢。我们都知道jsp页面本质是一个servlet或者说是一个java文件,只是被包装成.jsp后缀的文件了而已,但总归是要在jsp页面第一次被访问时转换成servlet,然后生成.class文件的。总的来说出现这个错误的可能有三个:页面有错误、jar包冲突、Tomcat容器出错。按理来说Tomcat容器是不太可能出错的,但一般我们排除错误时,往往可能从最不可能出现错误的地方查起,这就导致了我们排错的效率低下。
先说下配置:Tomcat 7.0.64,JDK1.7.0.79
我说下我的错误的排错之旅:因为刚开始不熟悉Tomcat的一些详细配置,毕竟以前我也只是写代码而已,没怎么关注过Tomcat具体怎么配置程序才有好的性能啊什么的。一开始出错,我就问外包公司的项目对接人员,他们服务器上的配置,然而我并没有完全按照他们使用的版本配置,我总共换了三个Tomcat,刚开始的Tomcat7,接着的Tomcat6.0.44,最后是外包公司的版本Tomcat6.0.30。在换了前两个Tomcat依然无法编译jsp时,我又换回了Tomcat7,因为是开发常用的版本。
前面的思路行不通,我就想到,能不能直接把本地编译好的jsp的class文件上传到Tomcat下work相同目录下,即/work/Catalina/localhost/_/org/tomcat/jsp/下的同目录下。重启了一下Tomcat,后台页面居然真的没错了。唉 这下也不能说搞定了。为什么呢,因为这种办法持续了没多久,在我再次启动Tomcat时,前台后台一起出现了前面所说的同样的错误。真折磨人呐 咱一个小小的程序员,用得着这样嘛。哈哈 发下牢骚。其实这也是很多开发人员常常遇到一个问题,就是刚刚接触到新事物时,常常是懵懵懂懂的状态,用了人家的框架啊什么的,原理都不懂,出事了赶紧找度娘,搜来搜去,直到哪个方法解决了你的问题,这时猿媛们就放弃继续深入学习的劲头了。
哈哈 又唠叨了一堆话。最后实在没办法,硬着头皮去改系统的源代码,哎呀妈呀,这半升级版残废的系统,写的有些好有些坏,还没升级完就给我们用了,真不厚道。最后,在改源代码的过程中,我发现程序规范真的很重要,为什么呢,因为当你看到别人烂成一坨翔的代码你的感受就深了。一般来说,在公司写的代码都应该尽可能的规范,因为你不知道什么时候你的代码可能被重用,如果你写的代码在重用时出了问题,公司不找你找谁。另外一个问题,就是变量初始化,由于jsp页面上通过jsp各种表达式什么的嵌入了大量的java代码,页面有点混乱,好些变量只有声明没有初始化,这可能会导致运行时异常。还有一个问题是关于泛型的,像ArrayList这样的集合类,在初始化时没有声明具体要放入集合的类型,这时集合对元素的类型检查就比较麻烦,而如果你在初始化时就声明具体的元素类型,这时在你放入另外一个类型时,集合会很容易的发现问题并抛出异常,具体啥异常忘了。其实这一块我也只是懂一点点,就让我装一下吧。最后一个问题就是关于javascript和jsp页面规范。有些人在写代码的时候,容易把两者的注释表达式啊之类的混合着用,这难道有错?没有,只是你错误的混用了而已。由于javascript是一种弱类型语言,所以很多人未了省事,不给变量初始化,当这个变量不是普通的数据类型,例如数组、对象呢,这时就可能导致页面的错误了。
其实在我检查修改了源代码后,系统的所有页面已经可以正常的在Tomcat7下正常的运行了,包括前面出错的页面。慢着,还没说完Tomcat6.0.30呢,解决了问题后,我再次想想验证一下原来系统为什么能在本地测试时正常运行,本地测试是直接MyEclipse发布到,但是找不到问题。最后我又按照外包公司的Tomcat版本来配置运行未修改过的系统,我的妈呀,系统活的好好的喔,页面错误不用修改直接就能正常运行,百思不得其解。问了项目对接人员,也说不知道,有没哪位大神知道告诉我一声呀。难道是Tomcat6.0.30的容错性比Tocat7.0.64的好
- 关于Tomcat7无法编译jsp页面的解决方法
- jsp页面不编译el表达式的解决方法
- 关于linux下jsp传值无法显示的解决方法
- 关于jsp页面中中文乱码问题的解决方法
- 关于Jsp页面空值时显示undefined的解决方法
- 关于jsp页面上无法使用EL表达式的问题
- jsp页面太大无法编译问题
- 关于使用JCreator编译后无法运行的解决方法
- tomcat7下jsp页面乱码
- eclipse的Servers视图中无法添加Tomcat7的解决方法
- nginx无法编译的解决方法
- Spring MVC使用@ResponseBody无法跳转到对应的jsp页面以及ie8下报错的解决方法
- easyui在jsp页面的td文本过长时无法自动换行的解决方法
- 出现 JSP页面中使用JSTL标签无法解析 错误的原因及解决方法
- 在JSP页面无法显示List集合.类似${list.size()},${user.getId()}的解决方法
- Maven项目中JSP页面无法得到静态资源的解决方法
- 关于tomcat7下shutdown无法正常关闭服务的解决方案
- 关于 tomcat7无法登录进ManagerApp管理界面 的问题
- 每月书单
- LED设备驱动
- 32/64位平台printf uint64的方法
- oracle的type类型
- 8、编程珠玑笔记八算法设计技术
- 关于Tomcat7无法编译jsp页面的解决方法
- RMQ算法详解
- iOS开发之有趣的UI —— 自定义不等高cell
- 数组
- lintcode-单词接龙-120
- Java中Math用法
- Dart基础学习02--变量及内置类型
- 黑马程序员——Java基础——面向对象的特征(一)
- netty学习(5)--NIO基础知识