JSP
1. JSP热部署
2. 脚本标签
<%= %>
:输出脚本,调用out.println方法<% %>
普通脚本,在Service方法中,使用Java代码<%! %>
声明脚本,定义全局变量和方法
3. 注释
4. 指令
-
<%@ page ...%>
-
作用
定义页面的依赖属性,比如脚本语言,error页面,缓存需求等
-
使用方式
<%@ page attribute1 = “value1” attribute2 = “value2”%>
-
常用属性
属性 描述 contentType 指定当前JSP页面的MIME类型和字符编码格式 errorPage 指定当JSP页面发生异常需要转向的错误处理页面 isErrorPage 指定当前页面是否可以作为另一个JSP的错误处理页面 import 导入需要使用的Java类 language 定义JSP页面所用的脚本语言,默认是Java session 指定JSP页面是否使用Session,默认为true立即创建,false为使用时创建 pageEncoding 指定JSP页面的编码格式 注:errorPage和isErrorPage经常是结合在一起使用的
注:以前Servlet使用session是通过request.getSession()拿到session的
pageEncoding是指定JSP页面的编码格式,对比HTML页面,使用的是
<meta charset="UTF-8">
-
-
<%@ include ...>
-
作用
被包含的文件可以是JSP文件,HTML文件或者文本文件,包含的文件就好像是当前JSP文件的一部分,会被同时编译执行。
-
使用方式
<%@ include file = "被包含的JSP路径">
注:静态包含可能会有重名的冲突问题,不建议使用。建议使用下面的动作标签进行动态引用。
-
-
<%@taglib ...%>
-
作用:引入JSP的标准标签库
-
使用方式
<%@taglib uri = "外部标签库路径" prefix = "前缀"%>
-
5. 动作标签
-
include
-
语法
<jsp:include page = "相对URL地址"/>
-
作用
动作元素会将外部文件输出结果包含在JSP中(动态包含)
注:前面的指令include是将外部文件的输出代码复制到了当前的JSP文件中,这里的动作,是将外部的文件输出结果引入到了当前的JSP文件中。在不同JSP中定义的重名变量,不会产生冲突。
-
-
useBean
-
语法
<jsp:useBean id = "name" class = "package.className"/>
-
作用
用来加载一个,将在JSP页面中使用的JavaBean
-
-
setProperty / getproperty
-
语法
jsp:getProperty
jsp:setProperty
-
作用
jsp:getProperty
动作提取Bean属性的值,转换成字符串,然后输出 -
属性
name:表示要检索的Bean属性名称,Bean必须已经定义
property:表示要提取Bean属性的值
-
使用方式
<jsp:useBean id = "user" class = "com.yuannheng.entity.User"/>
<jsp:setProperty name = "user" property = "username" value = "tom"/>
-
-
forward
-
语法
<jsp:forward page = "相对URL地址"/>
jsp:forward动作将请求转到另外的页面
-
属性
page:page属性包含的是一个相对URL
-
使用方式
<jsp:forward page = "index.jsp">
-
-
param
-
语法
<jsp:param name = "xxx" value = "xxx">
-
使用方式
在forward内部进行使用,以请求的方式进行参数传递
-
6. 内置对象
7. 域对象
-
通过request域对象进行存取值
-
存值
-
取值
-
-
通过session域对象进行存取值
-
存值
-
取值
-
8. pageContext的作用
使用pageContext的原因:
- 有可能无法获取内置对象,使用pageContext拿。
- pageContext可以操作别的域对象的作用域
这个是一个重载方法,选择存在哪个作用域中。
还可以使用pageContext.findAttribute()
方法进行取值,其会从四大域对象中所有的作用域中查找,先从pageContext,之后request,session,application,依次增大进行查找。
9. EL表达式
-
作用:
用于替换具体某个作用域中的数据
-
${}
获取作用域中的数据,如果不指定scope,会逐级查找{pageContext / request / session / application} -
使用方式:
- ${score.name}
- ${name}
-
EL表达式,如果获取不到Attribute,什么都不会显示,区别于Jsp
-
EL表达式获取对象
如果是希望通过EL拿到存放到作用域里面的对象,可以直接
${对象名}
,如果进一步需要拿到对象中的属性,可以通过.
拿到。注意,${对象名.属性}
拿属性的方式不是通过类中的属性,而是属性的get方法。 -
EL表达式获取Array,List,Map
因为Set没有下标,暂时不提。
-
EL运算符
- 基本运算符
只能写在EL表达式里面,如果写在了外面,就会当做页面上的元素进行输出了。
加减乘除取余,五种常见的运算。
其中除与取余,可以使用英文关键字替代:div / mod
-
空运算符:
结果返回为true,证明""是符合empty的,为null,同样返回true.
-
EL内置对象
EL内置对象共有11个
10. JSTL
-
引入原因
为了解决EL表达式存在的不足:
-
JSTL名称
Java Server Pages Standard Tag Library ,是一个JSP标签集合。
-
作用
- 可对El获取到的数据进行逻辑操作
- 与EL合作完成数据的展示
-
使用方式
-
实例
-
单条件判断
判断条件需要结合EL表达式,JSTL只是逻辑控制
注:JSTL中if标签没有else,如果需要else,重新写一个if
-
多条件判断
-
迭代
-
语法
-
实例
输出结果
-
进阶使用
输出结果
-
-
URL标签
当浏览器禁用了Cookie,会将JsessonId拼接在返回的路径上,使用下面
<%=%>
或者JSTL中URL标签都可以获取到完整的路径(包含JSessionId),所有涉及到页面跳转或者重定向跳转时,都应该使用URL重写。浏览器显示如下:
查看源代码如下:
-