因为学员们反映昨天讲解的信息量太大,所以今天先简要复习了一下昨天所讲解的内容。
区分回调方法与工具方法
子类Servlet要初始化,不能直接跑到父类中去改init方法,而是只能覆盖父类的init方法。父类中的其他一些方法依赖于init(ServletConfig config)方法的行为,覆盖时必须记住使用super.init方法来调用父类init方法原来的行为,然后再增加自己的代码,否则,覆盖就会出现问题。GenericServlet设计人员想到了这点,希望子类覆盖init()方法,而不是覆盖init(ServletConfig config)方法。
init(ServletConfig config)方法调用init()方法的过程,实际上就是模板方法设计模式。
重载service方法的原理。
按常理:func1调用func2,如果func2做了两件事,那么,func1至少做几件事?至少应该做两件事。doHead调用了doGet,那为什么doHead只输出了doGet方法的部分内容呢,即只输出了头,而不输出体?这是怎么实现的呢?帮着大家分析了源码。
浏览器缓存内幕与getLastModified方法:浏览器显示的内容没有变化,能否能否说明浏览器没有发出请求呢?doGet方法中的打印语句没有输出到tomcat后台,能否说明浏览器没有发出请求呢?不能,是否调用doGet方法,由getLastModified方法的返回值来决定。
Web应用程序的初始化参数与Servlet的初始化参数的比较分析,根据王泽佑错误的提示,我想到了以后讲解ServletContext.getInitParameter时可以做一个有趣的实验,帮助回忆init方法的讲解:故意覆盖init(ServletConfig config),不调用super.init方法,在其中调用getServletContext().getInitParameter方法,报告NullPointerException,问问怎么回事呢?
如何在web应用程序中记录日志
application域属性的作用,示例代码如下:
ServletContext application = /*getServletConfig().*/getServletContext();
Connection cn = (Connection)application.getAttribute("conn");
if(cn == null)
{
cn = createConnection();
application.setAttribute("conn",cn);
}
PrepresStatement pstmt = cn.prepareStatement();
在Web应用程序中访问资源文件的几种方式。
问题:CLASSPATH指向了c:/盘,要读c:/a/b.txt,Class.getResourceAsStream("")中的字符串怎么写?"/a/b.txt"
作业1:写一个Servlet,通过参数指定一个目录名,就列该目录下面的内容,例如:
提示:
http://localhost:8080/Myservlet?dir=c:/
得到参数的代码:request.getParameter("dir");
由于参数中不能出现特殊字符,要进行url编码,该怎么办,请想个好办法?用form表单。
想到一个严重的问题:怎样让jsp和asp程序只能浏览某个限定的目录,而不能随意浏览计算机上的其他目录!已经安排学员们上各大网站去问,如果哪位路过的高人有此方面的经验,望不吝赐教!ps:我们的方老师正在研究通过java安全方面的知识来解决这个问题。
方老师已经搞定了jsp的问题,就是用安全方式启动tomcat即可。关于asp的问题,还希望有类似经验的朋友介绍一下.
作业2:通过Servlet程序在Web应用程序的WEB-INF目录中生产一个文件,并写上一些内容。真实应用说明:保存上传的文件内容。