第四讲Servlet.docx
- 文档编号:23394390
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:20
- 大小:3.63MB
第四讲Servlet.docx
《第四讲Servlet.docx》由会员分享,可在线阅读,更多相关《第四讲Servlet.docx(20页珍藏版)》请在冰豆网上搜索。
第四讲Servlet
动态网页和动态HTML页面
动态网页是指:
由服务器产生的动态内容的HTML页面
由服务器产生,在不同的时间,不同的条件下返回给客户端的不同页面。
(每次客户端查看得到的源码都是不同的)
动态HTML页面是指:
由客户端脚本产生的有动态视觉效果的页面。
(每次客户端中的源码都是相同的)
设置的Servelt不能作为:
web应用程序的默认文档的
其中
上面的test.do就是servlet,访问的时候就会出现问题
访问结果:
列出服务器中的资源!
例子:
ExtClassLoader没有父级类装载器原因:
ExtClassLoader的属于BootStrap的一个装载器,但是BootStrap不属于一个类,它属于内核代码,无法表示这个,所以只能说ExtClassLoader没有父级的类装载器
父子加载器的加载过程:
前提摘要:
ClassLoader是基类加载器,是一个抽象类,定义的加载器需要实例化
(每个加载器都有一个自己的findClass方法,和loadClass方法,loadClass方法是检查是否类已经加载的)
加载过程:
比如:
A是B的子加载器,B是C的子加载器
如果调用A加载器,首先A调用loadClass检查是否已经加,如果加载了,就结束,否则委托B加载,B也检查是否加载,没有就继续委托C,一直到BootStrap。
如果父类的都不能加载,则C调用自己的findClass,找不到,则B调用自己的findClass,找不到,就A的findClass,再找不到就ClassNotFindException错误!
BootStrap:
加载核心包中的rt.jarjar包(所以一般开发用的类都是它加载的)
ExtClassLoader:
(核心包中提供的类加载器)是编译和运行的时候都会用此加载器
(所以,把jar放到这里(ExtClassLoader加载路径),就不用写到环境变量了,因为jar在编译运行都会被搜索和加载)
AppClassLoader:
(核心包中提供的类加载器)当我们启动,加载(启动!
!
)java程序的时候,就用AppClassLoader去加载那些用到的类
但是:
ExtClassLoader又是AppClassLoader的父级类装载器,所以,AppClassLoader就可以委托ExtClassLoader加载ext路径下面的jar包了
记住,在一个线程中的装载器,装载完后,会用此线程再去装载此线程以下所以的类!
!
即:
如果先在这里成功装载一个类后,之后此线程以后的类都会用这个装载器!
比如:
在项目中,你移动了一个Servlet的class到System要装载的目录下
首先,Webapp会寻找,找不到,父装载器Shared在它的范围内寻找,还是找不到
到,Common装载器开始寻找,还是没有,就委托System(AppClassLoader)寻找,
由于你放到了System装载器的寻找范围内,找到了!
那么,接下来的所有类将是System装载器来装载,而不是用Webapp来装载!
!
接下来还会发生错误(就算在classpath中加了这个文件的路径)!
因为Servlet是继承了HttpServlet需要此类才能不发生错误
,但是System装载器只是检查classpath中有没有HttpServelt,BootStrap也不能加载到,因为HttpServlet在Commmon的范围内!
!
所以就发生错误了!
注意:
Servlet的编译和运行环境是不一样的!
!
编译是javac的命令行窗口的环境,或者是IDE的环境!
而运行是有关Tomcat的环境!
!
!
如果出现编译或者运行错误,要找相应的错误地方!
!
记住:
只要创建了一个Servlet对象,除非销毁,否则就一个对象
所以init方法就初始一次!
!
而HttpServletRequest和HttpServletResponse是每次的连接都是新的对象!
这里的web.xml不是webapp中的,而是容器(Tomcat中的Config中的web.xml中的,这样才是容器启动时候才能加载的)
特殊情况:
在web.xml中
这个标签中可以增加一个子标签
如果这个标签对中是0或者>0的数字(数字越小,装载越早),则这个
(不是等请求来的时候再创建实例)
如果多个
自动重载说明:
即时设置了reloadable设置成了true,但是Tomcat也是每隔一段时间检查,所以要等待一段时间刷新网页才是真正的结果
只有在开发的时候才设置为true,成为产品的话,要设置成false,否则浪费资源
SingleThreadModel是创建多个Servlet对象来解决多线程问题
但是已经废弃
只有有共享资源被多线程访问的时候要考虑多线程问题。
作用:
为servlet增加初始参数。
注意:
一个
如:
如果要第二个参数,则要写第二个这样的代码段。
初始参数不是可以直接在代码中给么?
为何写在这里?
原因是有它的好处
好处:
不用修改代码,直接修改config中的web.xml来修改,便于修改
其中:
【getInitParameter根据设置的】
中的
【getInitParameterNames】
以Enumeration对象,返回所有
【getServletContext】
返回ServletConfig对象(就是当前运行的Servlet容器,如Tomcat)
【getServletName】
返回在web.xml中设置的servlet名字。
其中:
HttpServlet继承了GenericServlet接口
而GenericServlet继承了Servlet和ServletConfig
所以,继承了HttpServlet拥有就拥有了他们的方法
注意:
Tomcat中,servlet不配置特殊的参数的话,默认是访问的时候初始化(init函数)
如果有特殊的配置,则是服务器启动的时候初始化。
ServletCookies
Cookies是文本文件,不能写入中文,和其他的格式。
例如序列化写入。
还有说明这里的配置!
!
!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 Servlet