传智播客java+3G+Android 就业班 第5天笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、 Servlet
1. javaweb 学什么
用 java 语言开发动态的web资源,接下来就是介绍如何开发动态的web资源
2. 怎么去写这样的java程序(动态的web资源)
3. 实现服务器管理java程序
服务器如何管理动态的web资源,服务器会要求我们开发的java类去实现一个特殊的接口还需要在配置文件中说明, java类对应的url (web.xml)
4. 实现第一个Servlet程序
4.2. 导入 servlet jar包
set classpath=%classpath%;D:\apache-tomcat-6.0.20\lib\servlet-api.jar 4.3. 编译带包的类
javac -d . HelloWorldServlet.java
4.4. 将包拷贝至 day05/WEB-INF/classes 目录下 --> 发布 web 工程
注意: servlet 对象一旦创建就会驻留在内存中,为所有的请求服务,什么时候销毁直到服务器关闭时或web应用被移除才销毁
Servlet 执行流程图
service方法就返回
5. 用 eclipse 工具开发 Servlet
5.1. 建一个 web project
5.2. 在src下建包,创建一个java类实现Servlet接口
5.3 在 Webroot\WEB-INF\web.xml 做 servlet 映射
5.4 配置 tomcat 服务器
window--> preferences --> tomcat6.x
5.5 将web工程发布至tomcat 服务器
发布的web应用名称可以配置 web工程右键选properties-->myeclipse-->web
默认情况使用工程名作为发布后的web应用名
5.6 启动tomcat服务器运行程序
6. HttpServlet对象
一般来讲我们开发一个Servlet会去继承 HttpServlet
在 eclipse 下开发Servlet 可以直接新建一个Servlet,覆写 HttpServlet 的 doGet和doPost方法
继承 HttpServlet 的原因是: HttpServlet实现了service方法,将ServletRequst和ServletResponse 强转为子类 HttpServletRequest和HttpServletResponse,让我们用起来更加方便,同时,在service方
法中,它判断了请求方式,根据请求方式来调用 doGet 和 doPost
二、 Servlet 细节
1. * 号统配符
可以用…/*‟和…*.扩展名‟两者不能一起用
/* 具有较高的优先级
2. load-on-startup 元素
servlet配置了此元素,就会在web应用加载的时候就完成初始化,数字越小就越先初始化
3. tomcat\conf\web.xml
该服务器下所有web 应用中的web.xml 都继承自此文件
http://localhost:8080/day05/a.html a.html是资源名
上面的url访问的url在web.xml文件中并没有配置
此时会去访问缺省的Servlet,在tomcat\conf\web.xml文件中就配置了一个缺省的DefaultServlet DefaultServlet帮我们去web应用下读取 a.html 文件,并打给浏览器,如果没有发送 404 页面
也就说,我们通过ie访问服务器访问的都是 Servlet
4. Servlet线程安全问题
解决Servlet线程安全问题:加上同步的锁(lock)
SingleThreadModel接口的Servlet
服务器会做判断,当有请求过来,如果Servlet对象忙着呢,服务器会再创建一个Servlet对象为用户
提供服务,如果Servlet闲置,就直接提供服务
这样的方式实际上是回避了线程安全问题,单线程访问Servlet,这样的方式不可取
三、 ServletConfig 对象
作用:封装 Servlet 初始化参数
2. web 容器在初始化Servlet时,会将初始化参数封装到一个 ServletConfig 对象中,传给init方法
3. 我们在Servlet 中覆写 init方法,就可以获得ServletConfig
4. 父类 GenericServlet 中定义了一个成员变量用于记住此对象,并提供了 getServletConfig 方法我们可以直接调用此方法获得 config 对象
四、 ServletContext 对象
1. ServletContext对象代表整个web应用
2. ServletContext对象是一个域对象(可以存储数据的对象)
ServletContext对象的内部维护了一个map集合 key是String类型 value是Object类型class ServletContext {
private Map<String, Object> map ;
}
3. ServletContext 作为域对象,多个Servlet 可以共享数据
Servlet6
Servlet7
4.获取web应用的初始化参数
5. 统计一个web应用的访问量
在 context 域中维护一个count变量
访问Servlet时,取出变量加1
6. 实现请求转发
实现请求转发需要用到转发对象 RequestDispatcher
有一个 forward 方法能转发请求
7. 如何读取工程中的配置文件
7.2 读取java工程下的文件
// 不能相对虚拟机目录不能用绝对路径
类加载方式缺点
1)不能读取类路径以外文件
2) 由于需要加载到内存,不能读大文件
web工程中如果用类加载的方式读
类加载实际上读取的是内存中加载的文件,此时将读不到硬盘上资源文件的修改除非重新发布工程,因为重新发布就相当于,移除web应用,再发布web应用
五、 Servlet缓存
HttpServlet 的 Service方法中的代码。