Servlet简介:
用Java 编写的服务器端程序
运行在 Web 服务器上
执行服务器端处理
HTTP请求
WEB浏览器-----------> Web服务器--->Servlet <----------- HTTP响应
Servlet的优点:
1.持久
2.速度快且性能更佳
3.跨平台
4.可扩展
5.安全
6.可用于各种客户端
Servlet 体系结构 Servlet包含两个包:
javax.servlet 称为GenericServlet
javax.servlet.http 称为HttpServlet
Servlet包的层次结构
Servlet
|
GenericServlet
HttpServlet
用户自定义的 Servlet
Servlet必须实现 javax.servlet.Servlet 接口
通过扩展这两个类实现:
javax.servlet.GenericServlet
跨协议的 Servlet:
javax.servlet.HttpServlet
HTTP Servlet
抽象类
GenericServlet -----与协议无关的Servlet
ServletInputStream ----二进制输入流
ServletOutputStream ----二进制输出流
接口
ServletConfig -配置
ServletContext -与容器通讯
Servlet -定义必须实现的方法
ServletRequest -请求
ServletResponse -相应
RequestDispatcher -转发
SingleThreadModel -单线程
javax.servlet.http包
类
Cookie
HttpServlet -抽象类
HttpSessionBindingEvent -会话绑定事件
HttpServletRequest -HTTP请求
HttpServletResponse -HTTP相应
HttpSession -会话
HttpSessionBindingListener-会话绑定监听器
Servlet的生命周期
服务器加载 Servlet
|
服务器创建Servlet类的实例
|
调用 Servlet 实例的init( ) 方法
|
收到请求
Servlet 在服务器调用destroy( ) 方法后被卸载
Servlet 等待下一个请求或由服务器卸载
service( ) 方法处理请求并将输出结果返回客户端
|
调用 service( ) 方法
Servlet 生命周期
Servlet 服务器负责管理Servlet的生命周期
三个阶段
init service destroy
service阶段使用请求/响应方式进行通信
init()方法
服务器构造Servlet实例后调用
执行 Servlet 初始化 – 创建或加载 Servlet 在处理请求时使用的对象
可以覆盖 init()方法,添加其他初始化内容
destroy()方法
卸载 Servlet 时,调用 destroy ( ) 方法
释放获得的资源
服务器在完成所有服务调用之后,或者在经过服务器特定的秒数之后调用 destroy() 方法
请求和响应
可按两种方式进行:
请求的方式
ServletRequest
HttpServletRequest
响应的方式
ServletResponse
HttpServletResponse
HTTP Servlet 基本知识
HTTP Servlet 可生成 HTML 网页
HTTP Servlet 也可嵌入在 HTML 网页中
客户端以某种方法发送请求给 HTTP Servlet
GET 和 POST
GET 方法用于获得信息
POST 方法用于发布信息
提供对 HTTP 头数据的访问
扩展 HttpServlet 类并覆盖处理 HTTP 请求的 Servlet 方法
方法包括:
doGet(),用于从服务器获得信息
doPost(),用于将请求发送给服务器
getQueryString()方法返回客户端的请求字符串
可用方法
HEAD:客户端查看响应头
PUT:将文档直接放置在服务器上
DELETE:删除服务器中的文档
TRACE:调试辅助程序
OPTIONS:向服务器请求支持方法
访问客户端数据的方法:
getParameter( ),返回指定参数的值
getParameterValues( ),用在有多个值的情况
对于 POST、PUT 和 DELETE 请求
getReader( ) 返回 BufferedReader
getInputStream( ) 返回 ServletInputStream
提供返回数据的方法:
getWriter() 返回 Writer
getOutputStream() 返回 ServletOutputStream
ServletRequest接口可访问如下信息
客户端传递的参数的名称
正在使用的协议
远程主机的名称
ServletInputStream
输入流,用于获得使用 HTTP POST 和 PUT 方法等应用协议的客户端的数据
ServletResponse接口
作为回复响应客户端
设置回复的内容长度和 MIME 类型
提供 Writer 和输出流的机制
会话跟踪
对内存中可以存在的会话数量进行限制
在超过上述限制时,会话跟踪器会将近来最不常用的会话交换出去,以文件形式保存在磁盘上
会话无效在 session.invalidationinterval 属性中设置,不受会话交换的影响
会话跟踪技术
用户认证
持久 Cookie
URL 重写
隐藏表单字段
会话交换和持久
会话跟踪中的用户认证
会话跟踪中用户认证的优点:
容易实现
在用户从不同机器访问站点时也有效
即使用户退出浏览器也同样有效
用户认证的缺点:
用户登录以访问站点的每个会话都必须注册和获得帐户
用户在同一站点上不能同时维护多个会话
HttpSession接口
服务器的会话视图
在客户端和服务器之间提供持久的关联
在下列情况下,会话为新:
客户端首次进入页面或站点时
会话还未启动时
客户端选择不参与会话
ServletConfig接口
定义Servlet 配置对象
Servlet 引擎使用此对象将信息传递给 Servlet
包含对 ServletContext 对象的引用
方法:
String getInitParameter( String name)
Enumeration getInitParameterNames()
ServletContext getServletContext()
提供有关Servlet 引擎及其环境的信息
Object getAttribute(String name)
Enumeration getAttributeNames()
ServletContext getContext(String uripath)
过滤器(Filter)
Servlets Filter 是Servlet 2.3 规范中新增加的,它是截取用户从客户端提交的请求,在还没有到达需要访问的资源时运行的一个类。它操纵来自客户端的请求,在资源还没有初发送到客户端前截取响应,并处理这些还没有发送到客户端的响应 .
Filters的应用
Filters 有许多的应用场合。Servlet 2.3 规范建议如下的地方可以应用Filter:
authentication filters
logging and auditing filters
p_w_picpath conversion filters
data compression filters
encryption filters
tokenizing filters filters that trigger resource access events
XSL/T filters that transform XML content
MIME-type chain ilters
Filter的结构
自定义Filter必须要实现javax.servlet.Filter接口,这个接口只要包含了三个主要的方法:
init(FilterConfig filterconfig)-初始化过滤器
doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain chain)-进行具体的过滤操作执行完过滤操作后,它需要执行chain.doFilter(srequest,sresponse);来把控制权转让给下一个过滤器.
destory()-销毁过滤器,可以在这里释放使用完的资源,例如设置过滤器中FilterConfig为null。