三阶段总结
1.注意lable标签的for属性,绑定错误可能会导致事件冒泡导致一个事件被执行多次。
2.访问一个页面,附带get请求值,如果这个页面经过的filter,一定要在filter内request.setAttribue,否则页面会获取不到请求值
3.java.io.NotSerializableException: bean.Category 该错误是由于Category类没事实现序列化接口导致报错!
众所周知,session是服务器端的一种会话技术,只要session没有关闭,一个会话就会保持。这里先引出一个问题:如果我在访问某个页面后,服务器重启了一下,但是网页还没关,那么原来的session还在么?答案是很明显的,你都把服务器关掉了,session肯定不是原来的session了,原来的像登录信息等一些跟session相关的信息肯定就没了。但是如果我们想要服务器重启后,还是原来的session,那跟如何做呢?
这就涉及到了一个叫序列化(Serializable)的技术。当对象存储到硬盘的时候,就需要实现序列化接口,序列化的功能就是添加了一个唯一的ID(类主键),这样在反序列化(从硬盘加载到内存)的时候就可以成功找到相应的对象。另外,还要弄清楚一件事情:一般大家都觉得容器关闭后,session就销毁了,其实不是这样的,容器的关闭并不会导致session的销毁。过程是这样子的,一旦容器关闭后,session就会被持久化到硬盘,并没有真正销毁,为了说明这个问题,来做个试验:打开tomcat的工作目录下正在运行的工程目录:我的是E:\web\apache-tomcat-8.0.26\work\Catalina\localhost\E_shop,里面只有一个org的文件夹,其他什么也没有,现在我们重启tomcat服务器,注意观察这里面的变化,当服务器停掉后,这个该目录下多了个SESSION.ser文件,服务器重启成功后,该文件又消失了。
所以,如果项目中的POJO实现了Serializable接口,当反序列化的时候就能找到刚刚序列化时候的POJO,原来session中的内容就能成功反序列化,session还是原来的session,这样原来页面的东西还在,刷新后还是继续上次的操作。如果POJO没有被实例化,那么在session发序列化的时候当然就没有了这些POJO了。
1. 容器关闭后session并没有消失,而是被持久化到了硬盘里;
2. 如果项目中的POJO实现了Serializable接口,那么会跟着session一起被持久化到硬盘,在反序列化的时候会成功还原;
3. 要想服务器重启后,还是原来的session,还继续紧接着原来的页面操作的话,就需要实例化项目中的POJO。
4.A child container failed during start tomcat XML中的servlet配置错误导致tomcat启动报错。
5.理清Servlet与JSP之间的数据传递流程,建好数据库、表,然后在写代码,想到那写到哪,越写越蒙。
6.善用Cookie,可以实现诸如自动登录、浏览记录的功能。
7.做好代码注释,尤其是比较复杂的业务功能,使得回头看时更容易理解。
8.注意,单独的JS文件内如果有EL表达式是获取不到值的,因为EL运行在服务端,JS运行在客户端,如果需要使用EL表达式,可以在JSP内设置一个隐藏域标签来获取值,JS文件内获取标签的value值即可。
9.图片上传问题:在eclipse中上传图片时,要一份上传到项目所在文件夹,一份上传到服务器文件夹,如果只上传到服务器,会导致当服务器再次启动时,上传的到服务器的图片消失,这是因为项目文件夹内没有该图片,tomcat复制项目文件时获取不到该图片。
10.长路、短路与、或运算报空指针异常问题
这样没问题,不会报错:
//长路短路 空指针报错问题 String a = "123"; String b = null; if(a!=null&&b!=null&&b.equals("456")) System.out.println(true);
但是如果equals前的与运算是个长路与:
String a = "123"; String b = null; if(a!=null&&b!=null&b.equals("456")) System.out.println(true);
此时空指针异常,因为即使b!=null是false,后面的equals方法仍然会被运算!