Servlet
一.概念
Servlet => Server Applet => 服务器端的小程序(类)
Servlet技术中的三大组件之一
Servlet 动态资源
FIlter 过滤器
Listener 监听器
*实现接口
*继承GenericServlet
*继承HTTPServlet
三. 在MyEclipse中开发Servlet
1.创建项目
2.创建java类并实现Servlet接口
3.编译并将编译后的class文件方知道WEB-INF/classes目录下(Myeclipse会自动做这件事)
4.配置Servlet
四.Servlet生命周期详解
*Servlet对象创建时机? 第一次访问servlet时.
*Servlet对象创建的特点? 通过只在第一次访问时调用init的现象, 一个servlet实例在服务器中只有一个.
*当请求访问servlet时,service方法会处理请求.
*当服务器将要关闭,服务器会销毁服务器中的Servlet对象,在真正销毁之前调用destory方法.
五.Servlet 中其他方法
*getServletInfo => 没用
六.ServletConfig
String getInitParameter(String name) 获得配置信息 根据键获得值
Enumeration getInitParameterNames() 获得配置信息 获得所有键
String getServletName() 获得servlet的名称 <servlet-name>AServlet</servlet-name>
ServletContext getServletContext() 该方法返回ServletContext对象.
七.Servlet的优化.GenericServlet
1.init方法 妥善的保存config对象
2.空参init方法,为了防止开发人员重写 原生init方法
3.service方法空实现=> 声明城抽象
4.destory方法空实现
5.实现getServletInfo,getServletConfig
1.强转
九.Servlet细节
*Servlet的线程安全问题
Servlet的实例在服务器运行期间只有一个实例存在.所以线程不安全.
线程不安全: 如果使用成员变量来接受线程参数.如果发生并发,那么会出现线程问题(覆盖)
默认情况: 第一次访问该servlet时候.
让servlet实例随着服务器的启动而创建:
添加一个配置即可:<load-on-startup></load-on-startup>
在该配置中填入一个整数即可实现.
数字的数值,在有多个servlet需要随着服务器启动而启动时,决定启动顺序.
数字越小优先级越高. 最小就是0. 一般0~5. 3.
<url-pattern></url-pattern>
该配置,配置方式有两种
路径匹配: 一定以"/"开头
/AServlet
/ABC/AServlet
/ABC/BCD/AServlet
/ABC/*
/*
/
后缀名匹配: 以*开头
*.do
*.action
*.html
注意:
匹配范围越大,优先级越低.
后缀名匹配和路径匹配不能同一配置中混合使用. 例如: /*.do
一个servlet可以配置多个路径. 直接在<servlet-mapping>元素中添加多个<url-pattern>配置即可.
优先级: /AServlet > /abc/* > *.do > /*
*tomcat/conf/web.xml 文件理解(了解)
该文件可视为所有项目中web.xml的父配置.
十.ServletContext
ServletContext 对象可以看做是web项目的法人.
我们一个WEB项目 有 且只有一个ServletContext .
创建: 随着项目的启动而创建
销毁:随着项目的关闭而销毁
获得:通过ServletConfig对象的 getServletContext方法获得.
功能:
1.可以获得项目参数
2.是Servlet技术中的3个域对象之一
3.获得项目内的资源
//-----------------------------------------------------------------------------------
功能详解:
1>获得项目参数
String getInitParameter(String name)
Enumeration getInitParameterNames()
//-----------------------------------------------------
2>域功能
Servlet三大域
application
request
session
jsp技术中的域
page
域用于服务器组件之间的通讯(例如:两个servlet之间通讯).
域的实质就是map.
application域 就是在整个项目内共享数据的map.
*操作域的方法:
void setAttribute(String key,Object value);
Object getAttribute(String key);
Enumeration<String> getAttributeNames();
void removeAttribute(String key);
//--------------------------------------------------------------------------------------
3>获得项目内资源
// 该方法使用相对路径获得 资源的流 其中 "/" ==> 项目根下 WebRoot
InputStream sc.getResourceAsStream();
// 使用相对路径获得绝对路径
String sc.getRealPath("/student.xml");
十一.使用Class获得项目内资源
//获得当前servlet的Class文件
Class c = this.getClass();
//2 根据Class 获得资源
//也是根据相对路径获得字节流
// 填写相对路径时分为两种情况
// "/"开头 : "/"=>代表classes目录
// 不以"/"开头: 会以当前class所在包为根
InputStream is = c.getResourceAsStream("student.xml");
System.out.println(is);
//获得web-inf/classes下的student.xml的流
InputStream is2 = c.getResourceAsStream("/student.xml");
System.out.println(is2);
//也可以获得绝对路径
URL url = c.getResource("/student.xml");
System.out.println(url.getPath());
一.概念
Servlet => Server Applet => 服务器端的小程序(类)
Servlet技术中的三大组件之一
Servlet 动态资源
FIlter 过滤器
Listener 监听器
Servlet就是一个接口. 接口中定义了一些方法. 这些方法分为两部分。一部分是生命周期方法。 一部分没啥用。
*实现接口
*继承GenericServlet
*继承HTTPServlet
三. 在MyEclipse中开发Servlet
1.创建项目
2.创建java类并实现Servlet接口
3.编译并将编译后的class文件方知道WEB-INF/classes目录下(Myeclipse会自动做这件事)
4.配置Servlet
四.Servlet生命周期详解
*Servlet对象创建时机? 第一次访问servlet时.
*Servlet对象创建的特点? 通过只在第一次访问时调用init的现象, 一个servlet实例在服务器中只有一个.
*当请求访问servlet时,service方法会处理请求.
*当服务器将要关闭,服务器会销毁服务器中的Servlet对象,在真正销毁之前调用destory方法.
五.Servlet 中其他方法
*getServletInfo => 没用
*getServletConfig => 获得启动信息对象
六.ServletConfig
String getInitParameter(String name) 获得配置信息 根据键获得值
Enumeration getInitParameterNames() 获得配置信息 获得所有键
String getServletName() 获得servlet的名称 <servlet-name>AServlet</servlet-name>
ServletContext getServletContext() 该方法返回ServletContext对象.
七.Servlet的优化.GenericServlet
1.init方法 妥善的保存config对象
2.空参init方法,为了防止开发人员重写 原生init方法
3.service方法空实现=> 声明城抽象
4.destory方法空实现
5.实现getServletInfo,getServletConfig
6.实现了servletConfig接口. 接口中的方法直接调用config实现类实现.
1.强转
2.根据不同的请求方式调用不同的方法
九.Servlet细节
*Servlet的线程安全问题
Servlet的实例在服务器运行期间只有一个实例存在.所以线程不安全.
线程不安全: 如果使用成员变量来接受线程参数.如果发生并发,那么会出现线程问题(覆盖)
解决办法: 将装载线程参数的变量放置到方法中,编程局部变量.
默认情况: 第一次访问该servlet时候.
让servlet实例随着服务器的启动而创建:
添加一个配置即可:<load-on-startup></load-on-startup>
在该配置中填入一个整数即可实现.
数字的数值,在有多个servlet需要随着服务器启动而启动时,决定启动顺序.
数字越小优先级越高. 最小就是0. 一般0~5. 3.
如果数字一样,谁先配置谁先创建.
<url-pattern></url-pattern>
该配置,配置方式有两种
路径匹配: 一定以"/"开头
/AServlet
/ABC/AServlet
/ABC/BCD/AServlet
/ABC/*
/*
/
后缀名匹配: 以*开头
*.do
*.action
*.html
注意:
匹配范围越大,优先级越低.
后缀名匹配和路径匹配不能同一配置中混合使用. 例如: /*.do
一个servlet可以配置多个路径. 直接在<servlet-mapping>元素中添加多个<url-pattern>配置即可.
优先级: /AServlet > /abc/* > *.do > /*
*tomcat/conf/web.xml 文件理解(了解)
该文件可视为所有项目中web.xml的父配置.
十.ServletContext
ServletContext 对象可以看做是web项目的法人.
我们一个WEB项目 有 且只有一个ServletContext .
创建: 随着项目的启动而创建
销毁:随着项目的关闭而销毁
获得:通过ServletConfig对象的 getServletContext方法获得.
功能:
1.可以获得项目参数
2.是Servlet技术中的3个域对象之一
3.获得项目内的资源
//-----------------------------------------------------------------------------------
功能详解:
1>获得项目参数
String getInitParameter(String name)
Enumeration getInitParameterNames()
//-----------------------------------------------------
2>域功能
Servlet三大域
application
request
session
jsp技术中的域
page
域用于服务器组件之间的通讯(例如:两个servlet之间通讯).
域的实质就是map.
application域 就是在整个项目内共享数据的map.
*操作域的方法:
void setAttribute(String key,Object value);
Object getAttribute(String key);
Enumeration<String> getAttributeNames();
void removeAttribute(String key);
//--------------------------------------------------------------------------------------
3>获得项目内资源
// 该方法使用相对路径获得 资源的流 其中 "/" ==> 项目根下 WebRoot
InputStream sc.getResourceAsStream();
// 使用相对路径获得绝对路径
String sc.getRealPath("/student.xml");
十一.使用Class获得项目内资源
//获得当前servlet的Class文件
Class c = this.getClass();
//2 根据Class 获得资源
//也是根据相对路径获得字节流
// 填写相对路径时分为两种情况
// "/"开头 : "/"=>代表classes目录
// 不以"/"开头: 会以当前class所在包为根
InputStream is = c.getResourceAsStream("student.xml");
System.out.println(is);
//获得web-inf/classes下的student.xml的流
InputStream is2 = c.getResourceAsStream("/student.xml");
System.out.println(is2);
//也可以获得绝对路径
URL url = c.getResource("/student.xml");
System.out.println(url.getPath());