1.过滤器的优点
(1)在不修改程序代码的基本上,增加
新的功能。
(2)将多个组件相同的处理逻辑集中写在
一个类里面(即过滤器),方便代码的维护。
2.监听器
(1)什么是监听器?
servlet规范当中定义的一种特殊的组件,
用来监听容器产生的事件并进行处理。
注:主要有两大类事件
1)生命周期相关的事件
容器创建或者销毁了request,session,
servlet上下文产生的事件。
2)绑订数据相关的事件
容器调用了request,session,servlet
上下文的setAttribute,removeAttribute
产生的事件。
(2)servlet上下文
1)什么是servlet上下文?
容器启动之后,会为每一个web应用
创建唯一的一个符合ServletContext
接口要求的对象。
该对象有两个特点:
a.唯一性,即一个web应用对应一个
上下文。
b.持久性,只要容器不关闭,应用没
有被卸载,则上下文会一直存在。
2)如何获得servlet上下文?
GenericServlet
ServletConfig
HttpSession
FilterConfig
都提供了getServletContext方法来获得
servlet上下文。
3)作用
作用1:绑订数据
setAttribute
getAttribute
removeAttribute
注:
生存时间 request < session <
servlet上下文,在满足使用条件
的情况下,应该优先使用生命周
期短的。
作用2:访问全局的初始化参数
step1,配置
company
达内
step2,读取
ServletContext提供的
getInitParameter方法。
(3)如何写一个监听器?
step1,依据要监听的事件类型选择相应的
监听器接口。
注:比如要监听session的创建和销毁,
应该实现HttpSessionListener接口。
step2,在接口方法当中,实现监听处理
逻辑。
step3,注册(web.xml配置监听器)
统计在线人数
3.servlet线程安全问题
(1)为什么说servlet会有线程安全问题?
1)容器在默认情况下,对于某个类型的
servlet,只会创建一个实例。
2)容器收到一个请求就会启动一个线程
来处理,就有可能多个线程同时访问同
一个servlet实例。
比如,这些线程要修改servlet的属性,
就有可能发生线程安全问题。
(2)如何解决
1)使用synchonrized对具有线程安全
问题的代码块加锁。
注:加锁会影响性能。
2)实现SingleThreadModel接口(
不建议使用)
容器会为每一个线程单独创建一个
对应的servlet实例。
4.servlet小结
(1)servlet基础
1)什么是servlet?
2)如何写一个servlet?
3)servlet是如何运行的?
4)http协议(了解)
(2)servlet核心
1)如何获得请求参数值?
2)表单包含有中文参数,如何处理?
3)servlet输出中文,如何处理?
4)容器如何处理请求资源路径?
5)如何将多个servlet合并成一个?
6)转发与重定向
7)servlet的生命周期
8)servlet的线程安全问题
9)servlet上下文(ServletContext)
(3)状态管理
1)什么是状态管理?
2)Cookie
3)Session
(4)数据库访问
1)如何使用jdbc访问数据库?
2)使用dao访问数据库
(5)过滤器与监听器
1)什么是过滤器?
2)如何写一个过滤器?
3)过滤器的优先级
4)初始化参数
5)什么是监听器?
6)如何写一个监听器?
(6)典型案例
员工管理
登录
session验证
验证码
5.jsp基础
(1)什么是jsp?
(2)如何写一个jsp?
1)html
直接写
2)java代码
a. java代码片断
<% java代码 %>
b. jsp表达式
<%= java表达式 %>
c. jsp声明 (a1.jsp)
<%! 声明变量或者方法 %>
3)隐含对象
a.什么是隐含对象?
b.为什么可以直接使用这些隐含对象?
c.有哪些隐含对象?
out
request
response
session
application
pageContext:
容器会为每一个jsp实例创建唯一
的一个符合PageContext接口要求
的对象。
作用1: (a2.jsp,a3.jsp)
绑订数据
作用2:
提供了获得其它所有隐含对象
的方法。
config: (a4.jsp)
ServletConfig实例
exception: (a5.jsp,a6.jsp)
只有当isErrorPage属性值
为true时才能使用,可以
通过该对象获得异常的简短
的描述信息。
page: jsp实例
4)指令
a.什么是指令?
b.有哪些指令?
page指令
import属性:导包
pageEncoding属性:
告诉容器,在读取
jsp文件时,使用指定的
字符集来解码。
contentType属性:
设置response.setContentType
方法的参数值。
isErrorPage属性:true/false(缺省),
如果值为true,表示这是一个
异常处理页面。
errorPage属性:指定一个异常处理页面。
session属性(a7.jsp):
true(缺省)/false,如果
值为false,则不能使用
session隐含对象。
include指令
file属性:告诉容器,在将
jsp转换成servlet时,将
file属性指定的文件的
内容插入到该指令所在的
位置。
taglib指令
引入jsp标签
5)注释 (a8.jsp)
a.
如果注释的内容是java代码,
会执行。
b. <%– 注释 –%>
如果注释的内容是java代码,
不会执行。
(3)jsp是如何运行的?
step1. jsp — > servlet
html —-> service方法,out.write输出。
<% %> –>service方法,照搬。
<%= %> —>service方法,out.print输出。
<%! %> —>为servlet添加新的
成员变量和方法。
step2. 调用servlet
练习:
注册流程
step1,检查验证码是否正确,如果
不正确,提示用户,否则进行下一步。
step2,检查用户名是否存在,如果
存在,提示用户,否则进行下一步。
step3,将用户的注册信息插入到数据库,
跳转到登录页面。
提示:
step1,建表
create table user(
id int primary key auto_increment,
username varchar(50) unique,
pwd varchar(30),
name varchar(100),
gender char(1)
);
step2,实体类 User
step3,DAO类 UserDAO
public User findByUsername(String username);
public void save(User user)
step4,regist.jsp
step5,ActionServlet