张孝祥讲课笔记(5月13日—5月18日)--版权:张老师

5.13上午:
 钱蕾的问题:在命令行中输入文件路径还进行//转义,很多人都不明白。
 讲解字符编码:首先说命“中”这个符号在计算机内存中是一个数字,在大陆和台湾对应的数字各不一样,大陆发给台湾的邮件有问题,每个国家地区定义的码表都有一个名称,编码委员会互不买帐,最后不方便沟通,有人支持公道,unicode码。演示记事本乱码的问题,接着写程序演示:
public class CharCode
{
 public static void main(String [] args)
 {
  String testStr = "中国";
  System.out.println(testStr.length());
  System.out.println(testStr);
 }
}
上面的简单程序,大家都说长度是4.改变操作系统的locale,以及改变文件为UTF-8编码。

接着讲解了xml基本语法,讲解了DTD的Schema的基本应用,让同学们基本可以看懂xml中引用DTD和Schema的情况。

5.13上午:
讲解tomcat的解压缩安装和启动配置,分析批处文件时,回顾了环境变量的作用(让程序具有配置性)和如何为JVM设置环境变量,编程显示JVM的所有环境变量。分析CATALINA_HOME时,首先就说CATALINA_HOME的值应该是什么,然后再分析批处理文件是如何设置的,然后在tomcate外面的目录中启动startup,看到CATALINA_HOME配置的错误,然后在tomcate里面启动startup,看到正常结果。接着分析浏览器访问Tomcat的原理,引出虚拟目录和虚拟子目录的配置,最后讲解welcome文件的设置。tomcat6的列目录默认是关闭的。
作业练习:写一个HttpServer程序。

---------------------------------------------------------------------------
5.14上午:
  讲解了web应用程序的另外几种配置方式,发现在tomcat6.x中,webapps下的应用程序中不含WEB-INF子目录也可以自动部署。讲解了xml文件中的每个元素都映射成为一个对象的设计思想,讲解了打jar包时要注意是对你打包,还是对你里面的内容打包的问题。
  大家对虚拟主机的数据发布有兴趣。给他们讲解了一下大概思路<Host>元素中有个appBase属性指定虚拟主机的基本目录,将这个目录设置为用户的ftp的根目录即可。
  讲解和演示了Servlet的运行原理和基本开发流程。
5.14下午:
  中午多个同学问了乱码的问题,所以先给大家讲了Servlet产生乱码的原因,response.setContentType方法有两方面的功能。接着讲解了*通配符映射路径的问题,分析了一个servlet可以创建多个实例的情况,并通过代码进行验证。service方法前能否加synchronized,理论上可以,实际上不可用。讲解初始化参数时,以缺省Servlet为例的listings参数进行讲解,顺便带出了缺省Servlet的作用。
由HttpServlet引出了模板方法设计模式:让你写十个实现相同接口的类,而这些类中的方法中的代码的异常处理完全相同,你怎么写这十个类?经过张伟收集学员们的学习反馈,才发现模板方法模式很模糊和referer头不能够理解。模板方法模式就用所有Servlet都要记录访问者的ip地址和referer来举例,这样更加实际和更有利于大家理解,并且,要强调虽然子类继承父类,在运行时就不要考虑父类了,只相当于把父类中的代码复制过来了。模板方法用到了继承,但与普通的继承不太一样,因为方法中的代码有一点不确定。

Servlet1 extend GenericServlet
{
 public void service()
 {
  String referer = request.getHeader("referer");
  String ip = request.getRemoteAddr();
  Date accessTime = new Date();
  log(referer+":"+ip+":"+ accessTime);
  
  doService();
  
 }
 
 doService()
 {
   ...1111
 }
}

Servlet2 extend Servlet1//GenericServlet
{
 public void doService()
 {
  ...2222
  
 }
}

先用上面的代码讲,然后再继续改造。

 


---------------------------------------------------------------------------
5.15上午:
      先讲http协议后,再将HttpServlet中的doGet和doPost方法。为什么1.0的时候,为什么设计成一个连接上只发一次请求?浏览器是在用户的驱使下向服务器发请求,浏览器不知道用户是否有下一次请求。
客户端程序向服务发送的数据内容:"GET /a.html HTTP/1.1/r/nHost:/r/n/r/n"
讲解if-modified-since头时,应该幽默点,例如,浏览器对服务器说:“老大,我有这个网页文件,自某个时间以来,是否修改过”,象讲故事一样,讲解每个头的作用。
练习:写一个类似确省Servlet的Servlet,将请求的文件发送给浏览器。这里不能急,getRealPath与getRequestURI等方法,以及getRealPath与getRequestURI如何拼凑出真实路径,需要大家自动慢慢动手体验,getRealPath与getRequestURI如何拼凑出真实路径。
5.15下午: 
     讲解了HTTP协议,重点帮助学员们分析了GET与POST请求方式的区别(让同学们能够熟练回答,从底层说起,然后再从应用方面说起),doGet和doPost等方法的工作原理,将service方法改为doGet,然后用浏览器直接访问,再做个post表单提交访问,看看不支持的运行结果,这个结果是父类的doPost方法实现的效果。

---------------------------------------------------------------------------
5.18上午:
   先检查大家写的类似确省Servlet的例子,引出讲解了总的web.xml文件和webapp下的web.xml文件中配置的servlet的类装载的问题,顺便讲解了eclispe的使用和重构技术,然后分析了李国栋的程序(定义了一个成员变量,然后在自己的a方法里又将这个变量传递给了b方法,所以b方法中就不再把这个变量当做成员变量)

count
a
{
 b(count);
}
b(int count)
{
 count++
}


讲解ServletContext中存储变量时(由多个Servlet要共享同一个变量(统计计数)引出这一话题),用单例模式来实现进行了对比,学员出去面试写的单例类名最后为GlobalDB,并描述其作用,以具有更好的真实性。杨颖说到用ServletContext具有线程安全问题,先取/再写,可能会覆盖别人写入的数据,而单例则很好解决这个问题。
讲解单例时,引出方法调用链,大家不太明白,我用StringBuffer举例。

5.18下午:
   讲解如何禁止浏览器缓存,讲解jsp的基本作用,讲解如何使用mvc,特别是RequestDispather的介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值