1.容器处理异常(了解)
将异常抛给容器,让容器来处理。
2.servlet小结
(1)Servlet基础
1)什么是Servlet?
2)如何开发一个Servlet?
3)什么是Servlet容器?
4)http协议(了解)
a.什么是http协议?
b.特点
c.数据包的结构
d.状态码,消息头
e.get/post请求
5)Servlet是如何运行的?
(2)Servlet核心
1)读取请求参数值
2)处理表单中文参数值乱码问题
3)Servlet输出中文乱码问题
4)转发与重定向
5)Servlet的生命周期
1)什么是Servlet的生命周期?
2)分成哪几个阶段?
a.实例化 (load-on-startup) 单例
b.初始化 (一次,overrid init方法)
c.调用/就绪 (doGet,doPost)
d.销毁
3)相关的接口与类 (Servlet,GenericServlet,HttpServlet)
6)Servlet上下文
7)线程安全问题
8)容器如何处理请求资源路径?
9)如何让一个Servlet处理多种请求?
10)路径问题
(3)状态管理
1)什么是状态管理?
2)如何进行状态管理?
3)Cookie
a.什么是Cookie?
b.工作原理 (set-cookie消息头,cookie消息头)
c.如何添加Cookie?
d.三个问题(编码问题,生存时间问题,路径问题)
e.如何读取Cookie?
f.Cookie的限制
4)Session
a.什么是Session?
b.工作原理
c.如何获得Session对象 (request.getSession)
d.绑订数据
e.Session超时
f.删除Session
(4)数据库访问
dao
(5)过滤器与监听器
1)什么是过滤器?
2)如何写一个过滤器?
3)初始化参数
4)优先级
5)优点(了解)
6)什么是监听器?
7)如何写一个监听器?
(6)案例
员工管理
登录/注册
session验证
验证码
3. jsp
(1)什么是jsp?
.jsp(html + java代码) --->Servlet
(2)如何写jsp?
1)html (css,js): 直接写
2)java代码:
a.java代码片断: <% %>
b.jsp表达式: <%= %>
c.jsp声明: <%! 变量或者方法 %>
3)隐含对象
a.什么是隐含对象?
b.为什么可以使用这些隐含对象?
c.有哪些隐含对象?
out,request,response,session,application
pageContext(page上下文):
c1. 容器会为每一个jsp实例创建唯一的一个符合PageContext接口要求的对象。
注: 一个jsp实例对应一个pageContext,另外,只要jsp实例还在,pageContext就在。
c2. 作用
作用1:绑订数据 (setAttribute,getAttribute,removeAttribute
注:可以将pageContext看作是一个“钱包”,绑订到pageContext上面的数据,只有对应的
jsp实例才能访问。
作用2:获得其它隐含对象
exception(了解):只有当page指令的isErrorPage属性值为true时,才能使用。用来获取异常的简洁的描述。
config(了解): ServletConfig
page(不用): jsp实例本身(jsp对应的servlet实例)
4)指令
a.什么是指令?
b.指令的格式 <%@ 指令名 属性=值 %>
c.有哪些指令?
c1. page指令
import属性
pageEncoding属性
contentType属性
errorPage属性(了解):指定一个异常处理页面(专门用来处理其它jsp产生的异常)。
isErrorPage属性(了解):缺省值是false,当值为true时,表示这是一个异常处理页面。可以在该页面当中,使用exception隐含对象。
session属性(了解):缺省值是true,如果值设置为false,则不能够使用session隐含对象了。
c2. incude指令
file属性
c3. taglib指令
导入jsp标签。
5)注释
a. 如果注释的内容有java代码,会执行。
b. <%-- 注释的内容 --%> 如果注释的内容有java代码,不会执行。
(3)执行过程
step1. jsp转换成Servlet
html-------> service方法,使用out.write输出。
<% %> ----> service方法 ,照搬。
<%= %> ---> service方法,使用out.print输出。
<%! %> ---> 为Servlet增加新的属性和方法。
step2. 调用Servlet
4. jsp标签和el表达式
(1)什么是jsp标签?
jsp标签类似于html标签,用来替换jsp中的java代码。
注:因为直接在jsp文件中写java代码,不利于jsp文件的维护(比如,将包含有大量java代码的jsp交给美工去修改就很不方便),所以,sun公司制订了jsp标签技术规范。使用jsp标签代替java代码之后,jsp文件变得简洁,便于维护。而且便于代码的复用。
(2)什么是el表达式?
是一套运算规则,用于给jsp标签的属性赋值,也可以直接输出。
(3)el表达式的使用
1)访问bean的属性
方式一 ${user.name} : 容器依次从pageContext,request,session,application中查找绑订名为"user"的对象(getAttribute),找到之后,会调用该对象的"getName"方法,然后输出;如果找不到,会输出""。
注:a.依次,指的是先从pageContext上去查找,如果没有,再查找request,如果找到,则不再向下查找了。
b.如果值为null,会转换成""输出。
c.如果要指定查找范围,可以使用pageScope,requestScope,sessionScope,applicationScope。
比如:${requestScope.user.name}。
方式二 ${user['name']} 等价于${user.name}
注:a.[]可以使用绑订名。
b.[]可以使用从0开始的下标,用来读取数组中的某个元素。
2)做一些简单的运算
a. 算术运算 +,-,*,/,%
注: + 只能求和。
b. 关系运算 >,>=,<,<=,==,!=
c. 逻辑运算 && || !
d. empty运算 empty
用来判断集合是否为空,或者是否为一个空字符串。
3)读取请求参数值(了解)
${param.username}等价于request.getParameter("username");
${paramValues.city}等价于request.getParameterValues("city");
(4)jstl(java standard taglib)标签
注(了解):apache开发的一套标签,后来捐献给了sun。
1)如何使用jstl标签。
step1.导包。(jstl.jar)
step2.使用taglib指令,导入要使用的标签。
2)几个核心标签
a. if标签
注:a1. c是命名空间的前缀(别名)。
命名空间(namespace): 为了区分同名的元素而添加的一个限定。
a2. 如果test属性值为true,则执行标签体的内容。test属性可以使用el表达式来计算。
a3. var属性指定一个绑订名,scope属性指定绑订的范围("page","request","session","application")
b.choose标签
注:b1.when表示一个分支,如果test属性值为true,则执行该分支。(可以出现1次或者多次)
b2.otherwise表示例外,可以出现0次或者1次。
c.forEach标签
注:c1.用来遍历集合或者数组。
c2.items属性用来指定要遍历的集合或者数组,可以使用el表达式。
c3.var属性用来指定绑订名(绑订范围是pageContext)。
c4.varStatus属性用来指定绑订名(绑订范围是pageContext),绑订值是一个特殊的对象(由该标签创建,作用是用来获得当前遍历的状态,比如getIndex方法:获得当前被遍历的元素的下标。getCount方法用来获得当前是第几次遍历) 。
3)自定义jsp标签
编程步骤
step1. 写一个java类,继承SimpleTagSupport类。
step2. override doTag方法,在该方法里面,写处理逻辑。
step3. 在.tld文件当中描述标签。
<body-content>的值可以是emtpy,scriptless,JSP
empty:标签没有标签体。
scriptless:标签可以有标签体,但是标签体的内容不能够出现java代码(<% %>,<%= %>,<%! %>)。
JSP:标签可以有标签体,标签体的内容可以出现java代码。但是,只有复杂标签技术才支持。
注:复杂标签技术是一种比较老的标签技术。继承自SimpleTagSupport的标签属于简单标签技术。
代码示例: