JSP之常见错误
1.检查该工程是否已经部署到tomcat
2.检查URL的工程名,文件名拼写是否正确,大小写,斜杠/的方向。
3.重新部署,重新启动服务器再次运行。
4.新建一个JSP测试页面,验证是否可以访问到它。如果也不能,关闭服务器,去tomcat安装目录下面找到webapps文件夹和work文件夹,删除该工程名字的文件夹,再次部署、启动、运行(你甚至可以重新配置tomcat一次,以策万全)。
5.新建一个工程,将原工程的页面import或者copy进去。(原因未名,估计工具问题)
6.如果5这个方法都不行,那就新建工程,重新做一次了,老天保佑你。
二、500 页面有错误(报错永远比不报错好,当然也好过找不到页面^^)
.........1.如果是JSP页面有问题,往往会告诉你哪一行,此时要关注的是页面上显示的报错信息。
A.语法错误的话,自己先面壁思过。我说过虽然编译器有时会短路会在JSP页面胡乱红色警告,但你也要考虑你能不能忽略它。
B.如果页面使用了JSP脚本元素,一般你都是没考虑到页面被直接访问的多种情况,比如第一次访问根本就不存在,第二次以后才会有的对象,你就直接去.来用了,这样便java.lang.NullPointerException异常了,没关系,一个if就ok。
C.在学习了EL和JSTL后,B已经被唾弃了,你最多的可能的错误就是告诉你这个对象找不到,或者对象的属性不认识等。前者:确定你用了${}的方式使用对象,初次接触不是很习惯,会忘记,多写写就习惯了,比如三层架构,比如范型和for-each。后者:实体类的属性一定要存在,并且保证按照我们强调的命名规范Camel命名(至少Eclipase下面对于连续大写字母命名的方法|属性貌似识别有问题)。至于其他的,以后遇到可以补充,这两个是最常的。
.........2.如果是Servlet问题,要关注控制台的报错信息(不要跟我说不晓得哪里是控制台-_-!)
A.从上往下找。
B.先看错误描述信息,驱动找不到阿,SQL语句写错阿这些经历了N次的你不该看不懂了。
C.找到第一个你自己写的代码段描述信息,单击它定位到代码位置,研究并解决它。
3.备注:
A.JDBC直连,要求SQL SERVER打上sp3的补丁,如果你还会出现Error establishing socket错误,这个是说1433端口没打开,再打sp4补丁嘛。
B.根据DRIVER字符串不能加载驱动,检查你写对没有,包括是不是加了不必要的空格,如果是直连,要保证导入.jar的驱动包(JBuilder在工程里面add,Eclipse在该工程的lib下import)
C.找不到指定的数据源或数据库,请检查拼写,检查是否已经附加了数据库,odbc的话是否配置了数据源。
D.用户登录失败,请检查拼写,最好打开查询分析器去测试你的用户名+密码是否正确。
E.SQL语句的错误,比如表找不到,存储过程找不到(语法是要用{}的哈),不规范命名导致的字段的写法问题(比如id,name,password这些关键字要作为字段名使用要加上[ ])。同志们,其实这些的中文描述都已经很是明白,该晓得咋个去解决di~~
4.补充:
A.修改完一个错误,马上测试运行,因为很可能后面的异常都是前面异常引发的。当然,不要忘记先将控制台清空。
B.除非是正式交付你的代码段,任何捕获异常地方的e.printStackTrace()方法都写上,以准确报告异常信息。
三、不报错
1.程序正常运行,但结果跟预期不一致,一种可能是你修改过程序,但tomcat自动重新加载不及时,此时只需要停掉tomcat并重启执行。仍然不及时,就还是去tomcat安装目录下面找到webapps文件夹和work文件夹,删了该工程名字的文件夹,再次部署、启动、运行。
2.若1以后仍然,那么就是传说中的逻辑错误了,要借助调试工具来使用,很遗憾的是,这也是当前大家最缺的。什么工具的调试方法步骤都一样:设置断点(在你估计导致错误的地方设置),调试模式下逐语句(一句句的)或者逐过程(一个方法一个方法的)跟踪运行它,查看当前环境下变量的值。
3.若jsp页面上javascript的工能没有实现。但又没有报错。那可能是页面是那里写错了和多写了些什么编译器不认识的,可能调用函数方法错了(应是 οnclick="return 函数名称();"),或用了javascript不支持的一些方法和属性。如:。equals()。解决方法:在没有实现javascript功能的页面刷新,看下边状态栏的有没有报错(只有进度条没有完的时候才看得到,很短暂),不管有没有看到,都双击下边状态栏的“完毕”。有错就会弹出对话框告诉有错。没错就不会弹了。
0) java.net.BindException: Address already in use: JVM_Bind:8080
报告端口号被占用:
1、启动了两次服务器,所以强调每次关闭tomcat的时候要在控制台面板点两个叉那个图标,就跟强调每次启动后服务器就清空控制台信息以方便察看程序在运行中可能抛出的异常一个道理,当然,每次处理完一个异常也应该及时清理控制台再测试运行。
2、Eclipse非法关闭过,比如它自动关闭,或者程序无法响应后你强制关闭,此种情况要确保进程javaw.exe也结束了(去任务管理器察看,有则kill之),否则再次打开Eclipse会报端口号被占用。
3、以上情况都不是则可能是别的程序已占用了8080端口号,解决方法:要么关闭其他程序(问题是很可能你也不晓得是哪个程序占用了这些端口号);要么去tomcat目录下的conf文件夹,找到server.xml并通过记事本打开它,修改tomcat的端口号。
==><Connector port="8080" maxHttpHeaderSize="8192"...
==><Server port="8005" shutdown="SHUTDOWN">
一般来讲你要改8080,那个8005也要一起改了,至于改成好多,看你喜欢,但不要改成那些有特定含义的了,比如80,21,23,1433这些,相关资料自己查咯(记得这样做的话以后你访问的URL的端口号就得写成你改成的那个了哈)。
1) java.lang.NullPointerException
空指针异常,一般是当使用一个未被实例化的对象时候发生:
User user = (User)request.getAttribute("myuser");//1
user.getUserName();//2
==>当request中不存在myuser属性时,user对象为null,此时第2句则引发此异常。
解决方法:if(user!=null){user.getUsaerName();}
2) java.lang.IllegalStateException
非法状态异常,比如在Servlet中根据不同条件进行页面跳转时:
if(user==null){
response.sendDirect(request.getContextPath()+"/login.jsp");//3
}
request.getSession(true).setAttribute("myuser",user);
response.sendDirect(request.getContextPath()+"/logined/welcome.jsp");//4
==>第4句引发此异常,因为第3句已标示跳转了,虽然还能继续执行到后面,但就页面状态而言已经不能再跳,这个要涉及到Servlet容器内部知识,略之。总之,重定向或者转发页面的确都具备跳转页面的功能,但并不具备返回控制权的功能,其不能阻挡继续执行后续语句,所以:
解决方法:在第3句后加上return,否则你就写成if-else结构。
3) java.lang.ClassCastException
对象类型转换失败,比如当获得集合中的对象时:
User user =(User)users.get(i);之所以能够强转是因为存入的时候就是User对象,如果你一定要写成String user =(String)users.get(i);编译器并不报错(没有使用范型的情况下),但运行时就引发此异常了。类似的:String user =(String)request.getAttribute("myuser");一个道理。
解决方法:users如果是自定义的集合对象,可以使用范型。但是诸如后者request对象这些你没办法使用范型的,就要求你自己保证存入的类型和取出要强转的类型一致了。
4) java.lang.NumberFormatException
数据格式异常,一般针对将不能强转的类型进行转换(基础数据)
int age = Integer.parseInt("abc123");
Integer userAge = new Integer("abc123");
==>均引发此异常
解决方法:限制用户输入的合法性,比如Web编程,就使用JavaScript先做客户端表单验证.
5) java.lang.ClassNotFoundException
类找不到异常,类加载器不能通过字符串描述加载对应的类,我们一般都是在ConnectionFactory中使用Class.forName(DRIVER);的时候DRIVER写错了引发该异常(至少目前为止你还没有机会通过该方法去加载其他需要的类,或者通过其他方式加载类)
解决方法:确保导了驱动包,确保拼写正确。
6) java.lang.SQLException
SQL异常,进行数据库操作时候引发该异常。
解决方法:异常信息已经说得很明白了,因地制宜,就地解决,请充分发挥主观能动性。
〉〉一定要培养自己的调试能力,切记切记!