| 类别 | 使用场景 |
|---|---|
| HTML | 开发静态资源,无法加载动态资源 |
| CSS | 美化页面 |
| JavaScript | 给网页添加一些动态效果 |
| Servlet | 编写Java代码,实现后台功能处理 |
| JSP | 包含了显示页面技术,也具备Java代码功能 |
<%--注释的内容--%>
<%Java代码%>
+ JSP表达式
```jsp
<%=表达式%>
<%!声明变量或方法%>
如果加! 代表的是声明的是成员变量
如果不加! 代表的是声明的是局部变量
声明方法必须加!
<%@page 属性名=属性值 属性名=属性值...%>
| 属性名 | 作用 |
|---|---|
| ContextType | 响应正文支持的类型和设置编码格式 |
| language | 使用的语言,默认是java |
| errorPage | 当前页面出现异常后跳转的页面 |
| isErrorPage | 是否抓住异常,如果为true则页面中就可以使用异常对象,默认是false |
| import | 导包import=“java.util.ArrayList” |
| session | 是否创建HttpSession对象,默认是true |
| buffer | 设定JspWriter输出jso内容缓存的大小,默认8kb |
| pageEncoding | 翻译jsp时所用的编码格式 |
| isElgnored | 是否忽略EL表达式,默认是false |
<%@include file=包含的页面%>
<%@taglib url=标签库的地址 prefix=前缀名称%>
| 隐式对象名称 | 代表实际对象 |
|---|---|
| request | javax.servlet.http.HttpServletRequest |
| response | javax.servlet.http.HttpServletResponse |
| session | javax.servlet.http.HttpSession |
| application | javax.servlet.ServletContext |
| page | java.lang.Object |
| config | javax.servlet.ServletConfig |
| exception | java.lang.Throwable |
| out | javax.servlet.jsp.JspWriter |
| pageContext | javax.servlet.jsp.PageContext |
pageContext对象
是JSP独有的,Servlet中没有。
是四大域对象之一的页面域对象,还可以操作其他三个域对象中的属性。
还可以获取其他八个隐式对象。
生命周期是随着JSP的创建而存在,随着JSP的结束而消失。每个JSP页面都有一个PageContext 对象。
四大域对象
| 域对象名称 | 范围 | 级别 | 备注 |
|---|---|---|---|
| PageContext | 页面范围 | 最小,只能在当前页面用 | 因范围太小,开发中用的很少 |
| ServletRequest | 请求范围 | 一次请求或当前请求转发用 | 请求转发之后,再次转发时请求域丢失 |
| HttpSession | 会话范围 | 多次请求数据共享时使用 | 多次请求共享数据,但不同的客户端不能共享 |
| ServletContext | 应用范围 | 最大,整个应用都可以使用 | 尽量少用,如果对数据有修改需要做同步处理 |
<%--1.获取基本数据类型--%>
<% pageContext.setAttribute("num",10);%>
基本数据类型:${num}
<%--2.获取自定义对象类型--%>
<%
Student stu = new Student("张三",23);
pageContext.setAttribute("stu",stu);
%>
自定义对象:${stu}
<%--stu.name 实现原理 getName()--%>
学生姓名:${stu.name}
学生年龄:${stu.age}
<%--3.获取数组类型--%>
<%
String[] arr = {"hello","world"};
pageContext.setAttribute("arr",arr);
%>
数组:${arr}
0索引元素:${arr[0]}
1索引元素:${arr[1]}
<%--4.获取List集合--%>
<%
ArrayList list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
pageContext.setAttribute("list",list);
%>
List集合:${list}
0索引元素:${list[0]}
<%--5.获取Map集合--%>
<%
HashMap map = new HashMap<>();
map.put("hm01",new Student("张三",23));
map.put("hm02",new Student("李四",24));
pageContext.setAttribute("map",map);
%>
Map集合:${map}
第一个学生对象:${map.hm01}
第一个学生对象的姓名:${map.hm01.name}
| 运算符 | 作用 | 实例 | 结果 |
|---|---|---|---|
| ==或eq | 等于 | 5 = = 5 或 {5 == 5}或 5==5或{5 eq 5} | true |
| !=或ne | 不等于 | 5 ! = 5 或 {5 != 5}或 5!=5或{5 ne 5} | false |
| <或lt | 小于 | 3 < 5 或 {3 < 5}或 3<5或{3 lt 5} | true |
| >或gt | 大于 | 3 > 5 或 {3 > 5}或 3>5或{3 gt 5} | false |
| <=或le | 小于等于 | 3 < = 5 或 {3 <= 5}或 3<=5或{3 le 5} | true |
| >=或ge | 大于等于 | 3 > = 5 或 {3 >= 5}或 3>=5或{3 ge 5} | false |
| 运算符 | 作用 | 示例 | 结果 |
|---|---|---|---|
| &&或and | 并且 | KaTeX parse error: Expected '}', got '&' at position 3: {A&̲&B}或{A and B} | true/false |
| ||或or | 或者 | A ∣ ∣ B 或 {A||B}或 A∣∣B或{A or B} | true/false |
| !或not | 取反 | ! A 或 {!A}或 !A或{not A} | true/false |
| 运算符 | 作用 |
|---|---|
| empty | 1.判断对象是否为null 2.判断字符串是否为空字符串 3.判断容器元素是否为0 |
| 条件? 表达式1:表达式2 | 三元运算符 |
| 隐式对象名称 | 对应JSP隐式对象 | 说明 |
|---|---|---|
| pageContext | pageContext | 功能完全相同 |
| applicationScope | 没有 | 操作应用域对象数据 |
| sessionScope | 没有 | 操作会话域对象数据 |
| requestScope | 没有 | 操作请求域对象数据 |
| pageScope | 没有 | 操作页面域对象数据 |
| header | 没有 | 获取请求头数据 |
| headerValues | 没有 | 获取请求头数据(多个值) |
| param | 没有 | 获取请求参数数据 |
| paramValues | 没有 | 获取请求参数数据(多个值) |
| initParam | 没有 | 获取请求参数数据 |
| cookie | 没有 | 获取cookie对象 |
| 组成 | 作用 | 说明 |
|---|---|---|
| core | 核心标签库 | 通用的逻辑处理 |
| fmt | 国际化 | 不同地域显示不同语言 |
| functions | EL函数 | EL表达式可以使用的方法 |
| sql | 操作数据库 | 了解 |
| xml | 操作XML | 了解 |
| 标签名称 | 功能分类 | 属性 | 作用 |
|---|---|---|---|
| <标签名:if> | 流程控制 | 核心标签库 | 用于条件判断 |
| <标签名:choose> <标签名:when> <标签名:otherwise> | 流程控制 | 核心标签库 | 用于多条件判断 |
| <标签名:forEach> | 迭代遍历 | 核心标签库 | 用于循环遍历 |
| 返回值 | 方法名 | 作用 |
|---|---|---|
| void | init(FilterConfig config) | 初始化方法 |
| void | doFilter(ServletRequest request,ServletResponse response,FilterChain chain) | 对请求资源和响应资源过滤 |
| void | destroy | 销毁方法 |
FilterChain是一个接口,代表过滤器链对象。由Servlet容器提供实现类对象。直接使用即可。
过滤器可以定义多个,就会组成过滤器链。
核心方法
| 返回值 | 方法名 | 作用 |
|---|---|---|
| void | doFilter(ServletRequest,ServletResponse reponse) | 放行方法 |
如果有多个过滤器,在第一个过滤器中调用下一个过滤器,以此类推。直到到达最终访问资源。
如果只有一个过滤器,放行时,就会直接到达最终访问资源
配置方式
注解方式 @WebFilter(拦截路径
配置文件方式
<filter>
<filter-name>filterDemo01filter-name>
<filter-class>com.wzk.filter.FilterDemo01filter-class>
filter>
<filter-mapping>
<filter-name>filterDemo01filter-name>
<url-pattern>/*url-pattern>
filter-mapping>
多个过滤器使用顺序
如果有多个过滤器,取决于过滤器映射的顺序
| 返回值 | 方法名 | 作用 |
|---|---|---|
| String | getFilterName() | 获取过滤器对象名称 |
| String | getInitParameter(String key) | 根据key获取value |
| Enumeration | getInitParameterNames() | 获取所有参数的key |
| ServletContext | getServletContext() | 获取应用上下文对象 |
<filter>
<filter-name>filterDemo05filter-name>
<filter-class>com.wzk.filter.FilterDemo05filter-class>
<async-supported>trueasync-supported>
filter>
<filter-mapping>
<filter-name>filterDemo05filter-name>
<url-pattern>/error.jspurl-pattern>
<dispatcher>REQUESTdispatcher>
<dispatcher>ERRORdispatcher>
<dispatcher>FORWARDdispatcher>
<dispatcher>INCLUDEdispatcher>
<dispatcher>ASYNCdispatcher>
filter-mapping>
| 返回值 | 方法名 | 作用 |
|---|---|---|
| void | contextInitialized(ServletContextEvent sce) | 对象创建时执行该方法 |
| void | contextDestroyed(ServletContextEvent sce) | 对象销毁时执行该方法 |
参数:ServletContextEvent代表事件对象
事件对象中封装了事件源,也就是ServletContext
真正的事件指的是创建或销毁ServletContext对象的操作
| 返回值 | 方法名 | 作用 |
|---|---|---|
| void | sessionCreated(HttpSessionEvent se) | 对象创建时执行该方法 |
| void | sessionDestroyed(HttpSessionEvent se) | 对象销毁时执行该方法 |
参数:HttpSessionEvent代表事件对象
事件对象中封装了事件源,也就是HttpSession
真正的事件指的是创建或销毁HttpSession对象的操作
参数:ServletRequestEvent代表事件对象
事件对象中封装了事件源,也就是ServletRequest
真正的事件指的是创建或销毁ServletRequest对象的操作
| 返回值 | 方法名 | 作用 |
|---|---|---|
| void | attributeAdded(ServletContextAttributeEvent scae) | 域中添加属性时执行该方法 |
| void | attributeRemoved(ServletContextAttributeEvent scae) | 域中移除属性时执行该方法 |
| void | attributeReplace\ed(ServletContextAttributeEvent scae) | 域中替换属性时执行该方法 |
参数:ServletContextAttributeEvent代表事件对象
事件对象中封装了事件源,也就是ServletContext
真正的事件指的是添加、移除、替换应用域中属性的操作
| 返回值 | 方法名 | 作用 |
|---|---|---|
| void | attributeAdded(HttpSessionBindingEvent se) | 域中添加属性时执行该方法 |
| void | attributeRemoved(HttpSessionBindingEvent se) | 域中移除属性时执行该方法 |
| void | attributeReplace\ed(HttpSessionBindingEvent se) | 域中替换属性时执行该方法 |
参数:HttpSessionBindingEvent代表事件对象
事件对象中封装了事件源,也就是HttpSession
真正的事件指的是添加、移除、替换会话域中属性的操作
参数: ServletRequestAttributeEvent代表事件对象
事件对象中封装了事件源,也就是ServletRequest
真正的事件指的是添加、移除、替换请求域中属性的操作
| 返回值 | 方法名 | 作用 |
|---|---|---|
| void | valueBound(HttpSessionBangdingEvent event) | 数据添加到会话域中(绑定)时执行该方法 |
| void | valueUnbound(HttpSessionBangdingEvent event) | 数据添加到会话域中(移除)时执行该方法 |
参数:HttpSessionBindingEvent代表事件对象
事件对象中封装了事件源,也就是HttpSession
真正的事件指的是添加、移除会话域中数据的操作
| 返回值 | 方法名 | 作用 |
|---|---|---|
| void | sessionWillPassivate(HttpSessionEvent se) | 会话域中数据钝化时执行该方法 |
| void | sessionDidActivate(HttpSessionEvent se) | 会话域中数据活化时执行该方法 |
参数:HttpSessionEvent代表事件对象
事件对象中封装了事件源,也就是HttpSession
事件指的是会话域中数据钝化、活化的操作
监听对象的
ServletContextListener
HttpSessionListener
ServletRequestListener
监听属性变化的
ServletContextAttributelistener
HttpSessionAttributeListener
ServletRequestAttributeListener
会话相关的感知型
HttpSessionBindingListener
HttpSessionActivationlListener