目录
Servlet与过滤器
Servlet概述
JSP其实是一种负责显示的技术,如何只专注显示呢?
解决方案:将显示与接受请求、处理请求的工作分开
JSP
显示数据
Servlet
接受请求,调用JavaBean去处理请求
JavaBean
封装数据
业务逻辑
Servlet做了什么?
本身不做任何业务处理
只是接收请求并决定调用哪个JavaBean去处理请求
确定用哪个页面来显示处理返回的数据
Servlet是什么?
Server+Applet,是一种服务器端的Java应用程序
只有当一个服务器端的程序使用了Servlet API的时候,这个服务端的程序才能称之为Servlet
Servlet API
主要Servlet API介绍
javax.servlet.Servlet接口
所有Java Servlet的基础接口类,规定了必须由Servlet具体类实现的方法集
javax.servlet.GenericServlet类
是Servlet的通用版本,是一种与协议无关的Servlet
javax.servlet.http.HttpServlet类
在GenericServlet基础上扩展的基于Http协议的Servlet
如何创建Servlet
实现Servlet接口
继承GenericServlet类
继承HttpServlet类
第一个Servlet
Servlet中主要方法
init():Servlet的初始化方法,仅仅会执行一次
service():处理请求和生成响应
destroy():在服务器停止并且程序中的Servlet对象不再使用的时候调用,只执行一次
ServletRequest
封装客户的请求信息
作用相当于JSP内置对象request
ServletResponse
创建响应信息,将处理结果返回给客户端
作用相当于JSP内置对象response
ServletConfig
包含了Servlet的初始化参数信息
Servlet生命周期
生命周期 | 谁来做 | 何时做 |
---|---|---|
实例化 | Servlet 容器 | 当Servlet容器启动或者容器检测到客户端请求时 |
初始化 | Servlet 容器 | 实例化后,容器调用Servlet的init()初始化对象 |
处理请求 | Servlet 容器 | 得到客户端请求并做出处理时 |
销毁 | Servlet 容器 | 当程序中的Servlet对象不再使用的时候,或者Web服务器停止运行的时候 |
部署运行Servlet
修改web.xml(部署描述文件)
添加<servlet>:把Servlet内部名映射到一个Servlet类名
添加<servlet-mapping>:把用户访问的URL映射到Servlet的内部名
注意:<servlet-mapping>与<servlet>中的<servlet-name>必须一致
通过URL访问Servlet
Servlet配置
配置<servlet>元素
<servlet>
<servlet-name>myServlet3</servlet-name> //Servlet名称唯一
<servlet-class>demo.web.servlet.MyServlet3</servlet-class> //Servlet类所在路径
</servlet>
配置<servlet-mapping>元素
<servlet-mapping>
<servlet-name>myServlet3</servlet-name> //与<servlet>的<servlet-name>设置相同
<url-pattern>/myServlet3</url-pattern> //访问Servlet的URL,相对于Web应用的路径,有三种配置方式
</servlet-mapping>
初始化参数设置
配置<init-param>元素
<servlet>
……
<init-param>
<param-name>charSetContent</param-name> //参数名称
<param-value>utf-8</param-value> //参数值
</init-param>
</servlet>
public void init(ServletConfig config) throws ServletException {
String initParam=config.getInitParameter("charSetContent"); //通过ServletConfig对象读取初始化参数
System.out.println(initParam);
}
Servlet的作用:
负责接收请求,调用相应Service方法,决定如何响应,本身不做业务逻辑
创建和部署Servlet(重点):
创建:继承自HttpServlet
部署:修改web.xml添加<servlet>、<servlet-mapping>
Servlet的好处:
专人专职:JSP负责显示,Servlet负责控制
学习方法:
基于了解Servlet生命周期的基础,参照本次课新闻添加功能的实现,查询帮助文档独立实现新闻修改、删除等功能
过滤器
是向Web应用程序的请求和响应添加功能的Web服务组件
过滤器可以统一地集中处理请求和响应
使用过滤器技术实现对请求数据的过滤
过滤器的使用步骤
建立实现javax.servlet.Filter接口的类,实现过滤行为
doFilter(...) {
//过滤请求
chain.doFilter(request, response); //调用下一个过滤器或Web资源
//过滤响应
}
在web.xml中配置过滤器
<filter>
<filter-name>过滤器名</filter-name>
<filter-class>过滤器的完全限定名</filter-class>
</filter>
<filter-mapping>
<filter-name>过滤器名</filter-name>
<url-pattern>过滤器映射的Web资源</url-pattern>
</filter-mapping>
过滤器的生命周期
实例化
初始化:init()
过滤:doFilter()
销毁:destroy()
配置过滤器的初始化参数
配置<init-param>元素
<filter>
<init-param>
<param-name>Encoding</param-name> //参数名称
<param-value>UTF-8</param-value> //参数值
</init-param>
</filter>
读取过滤器的初始化参数
init(FilterConfig fConfig) {
String encoding=fConfig.getInitParameter("Encoding"); //通过FilterConfig对象读取初始化参数
}
过滤器链
多个过滤器会形成过滤器链
过滤器的应用场合
对请求和响应进行统一处理
对请求进行日志记录和审核
对数据进行屏蔽和替换
对数据进行加密和解密