一、JSP(Java Server Pages)Java服务器页面
1. 概念:一个简化的Servlet设计,在HTML中插入Java代码,用以高效开发Web应用的动态网页。
2. 作用:替换显示部分的Servlet。
二、JSP实现原理
编译器将每个项目里.jsp页面都转成.java文件再编译成.class文件存放在 //tomcat/work/...的目录里
三、HTML与Java集成
1. 脚本:
I. 输出脚本:
1). 作用:将Java表达式的结果输出到页面中(out.print())。
2). 语法:<%= Java表达式 %>
3). 注意:表达式不能加";"。
II. 声明脚本【没用】:
1). 作用:定义变量或者函数。
2). 语法:<%! 变量、函数 %>
3). 注意:声明脚本中的变量或函数,必须由输出脚本或者普通脚本使用。
III. 普通脚本:
1). 作用:可使用所有Java语法(除了定义函数)。
2). 语法:<% anything %>
3). 注意:脚本与脚本之间不可嵌套,脚本与HTML标签不可嵌套。(缺点:太麻烦,可读性太差,未来最好不用脚本)
2. 指令:
I.page:
1).语法:<%@page attribute1=value1 attribute2=value2 attributeN=valueN %>
2). 属性:
a.集成语言:language="java"
b.显示编码:pageEncoding="UTF-8" //JSP页面的解码格式
c.响应编码:contentType="UTF-8" //服务器给客户端传输本文的编码格式
d.内部导包:import="java.util.* , java.sql.*" //也可通过多个<%@page import="" %>分别导包
e.创建会话:session="true|false" //默认true 饿汉式,立即创建Session;false 懒汉式,使用时创建Session。
f. 错误页面:isErrorPage="true|false" //指定当前jsp为错误页面
g. 错误跳转:errorPage=" xxx.jsp " //如果有异常,跳转至错误页面
II. include:静态包含
1). 语法:<%@include file="被包含的jsp路径" %>
2). 作用:会将外部文件的源代码包含在jsp中。
3). 注意:可能会有重名的冲突问题,不建议使用。
III.taglib:
1).语法:<%@taglib uri="外部标签库路径" prefix="前缀" %>
2).作用:引入JSP的标准标签库。
3. 动作:
I. include:动态包含
1). 语法:<jsp:include page="被包含的jsp路径" />
2). 作用:会将外部文件输出结果包含在jsp中。
3). 注意:可更好的包含外部文件,对代码没有侵入性,建议使用。
4. 内置对象:由JSP自动创建的对象,可以直接使用。
I.request:HttpServletRequest
(动态获取web应用的名称:request.getContextPath();)
II.response:HttpServletResponse
III.session:HttpSession
IV.application:ServletContext
V. out:Writer的子类,与PrintWriter功能完全一致,可输出标签或Java代码。
VI. page:Object类型,代表JSP本身,类似于Java中的this。
VII. config:ServletConfig可取得服务器的配置信息。
VIII.exception:Exception,当<%page isErrorPage="true" %>时,才可以使用。
IX.pageContext:当前页面的作用域对象,一旦跳转则失效。主要用来通过它获取其他8个内置对象、或者操作其他对象的作用域。
1). 获得其他内置对象:
pageContext.getRequest();
pageContext.getSession();
pageContext.getServletContext();
pageContext.getOut();
...
2). 操作其他内置对象的作用域:
pageContext.setAttribute("key" , value); //当前页面有效
pageContext.setAttribute("key" , value , PageContext.PAGE_SCOPE); //当前页面有效
pageContext.setAttribute("key" , value , PageContext.REQUEST_SCOPE);
pageContext.setAttribute("key" , value , PageContext.SESSION_SCOPE);
pageContext.setAttribute("key" , value , PageContext.APPLICATION_SCOPE);
四、EL(Expression Language)表达式语言
1. 概念:从作用域获取数据。
2. 使用:
I. 语法:
${ scope.key } //获取具体某个作用域中数据
// ${requestScope.persons}
${ key } //根据作用域的范围,自小到大的逐级查找
(pageScope、requestScope、sessionScope、applicationScope)
II. 获取基本数据类型、字符串:
III. EL和JSP脚本的区别:
IV. 获取对象类型:
V. 数组、集合(List、Map):
VI. 运算:
1). 算数运算符:+ - * / %(mod)
2). 关系运算符:(> gt)(< lt)(>= ge)(<= le)(== eq)(!= ne)
3). 逻辑运算符:(&& and)(|| or)(! not)
4). 非空运算符:empty (可对命名属性进行非空判断)
VII. 获得特殊对象:
1). pageContext:可获取其他作用域的核心对象。
2). 通过pageContext获得动态应用名称:
3). param:
4). Cookie:
五、JSTL(JSP Standard Tag Library):JSP标准标签库
1. 概念:可对EL表达式获取到的数据进行逻辑操作。
2. 作用:与EL合作完成数据的展示。
3. 应用:
I. 引入标签库:
II. 通过前缀使用:
III. 标签:
a. 判断:
b. 多条件判断:
c. 遍历:
遍历str
遍历user对象的username属性
遍历 可以选择起始和跳跃的步数。(step=2 start=0 遍历集合中下标对应0 2 4 6...的对象)
遍历状态
d. URL重写:JSP页面重写URL
//response.encodeRedirectUrl();后端servlet重写URL
e. 日期格式化:
导入taglib->设置pattern(日期格式)
h. 移除:在某个作用域中移除命名属性
应用场景:例如登陆填写的验证码,登陆成功就该从Session中移除,不应该让它占据内存资源。