<%//第一种:java脚本段
//定义局部变量
String str = "hello jsp";
//输出内容到控制台
System.out.println(str);
//输出内容到浏览器
out.print(str);
//输出全局变量
out.write("" + num);
%>
<%!//第二种:声明全局变量,方法类
int num = 2;
%>
<%--第三种:输出表达式--%>
<%=str %>
JSP指令
JSP指令元素的语法
语法:
<%@ 指令名称 属性名称=属性的值 属性名称=属性的值 %>
JSP指令元素的分类
page指令:指示JSP的页面设置属性和行为
include指令:指示JSP包含哪些其他页面
taglib指令:指示JSP页面包含哪些标签库
page指令
写法:
<%@ page 属性名=属性值 %>
Page指令用来定义JSP文件的全局属性。
这些属性可以单独使用,也可以几个或多个同时使用。
在JSP页面中,只有import属性可以出现多次,其他属性都只能出现一次。
Page指令属性
language属性
:声明使用脚本的语言。只能是java。
extends属性
:标明JSP编译成Servlet的时候继承的类。默认值:HttpJspBase。
session属性
:标明JSP中是否可以直接使用session对象。默认值是true。
buffer属性
:标明JSP对客户端输出缓冲区大小。默认值8kb。
autoFlush属性
: 如果缓冲区大小溢出,是否自动刷出。默认true。
import属性
:用于导入Java包或类。
contentType属性
:标明JSP被浏览器解析和打开的时候采用的默认的字符集。
pageEncoding属性
:JSP文件及JSP翻译后的Servlet保存到硬盘上采用字符集。
isErrorPage属性
:处理JSP页面异常。
errorPage属性
:处理JSP页面异常。
isELIgnored属性
:通知JSP是否忽略EL表达式。
Include指令
Include指令简介
写法:
<%@ include 属性名=属性值%>
作用:
在JSP页面中静态包含一个文件,同时由该JSP解析包含的文件内容。
Include指令属性
file属性
: 指示JSP页面包含页面路径。
Include指令原理(静态包含原理)
在执行前不包含的jsp文件复制到包含位置
注意地方:
应该将被包含的页面的结构去掉。
在被包含的页面中定义变量,在包含的页面中还可以使用。
Taglib指令
Taglib指令简介
写法
<%@ taglib 属性名=属性值%>
作用:
用于在JSP页面中引入标签库。
Taglib指令属性
uri属性
: 引入的标签库的路径
prefix属性
: 引入标签库的别名
什么是JSP的内置对象
JSP的内置对象:指的是可以直接在JSP页面中使用的对象。
JSP的内置对象有哪些
JSP当中有9大内置对象:
request
:从客户端向服务器发送的请求对象
response
:从服务器端向客户端作出响应对象
session
:服务器为客户端创建会话对象
application
:代表应用。获得的ServletContext对象。
out
:向输出流写入内容的对象。
page
:当前的JSP翻译成Servlet后的对象的引用。
pageContext
:本JSP的页面的上下文对象。
config
:本JSP的ServletConfig对象。
exception
:表示JSP页面运行时产生的异常对象。
JSP的内置对象具体类型
request HttpServletRequest
response HttpServletResponse
session HttpSession
application ServletContext
config ServletConfig
page Object
pageContext PageContext
out JspWriter
exception Throwable
JSP的四个作用范围
PageScope
:页面范围。
页面范围指的是在当前的页面内有效,出了这个页面,用pageContext保存的数据就无效了。
RequestScope
:请求范围。
从客户端向服务器发送一次请求,服务器对这次请求作出了响应之后,用request保存的数据就无效了。
SessionScope
:会话范围。
每个浏览器向服务器发送请求(多次请求)。将该会话结束。
ApplicationScope
:应用范围。
在整个应用中任意的地方都可以获取。
JSP的四个作用范围演示
pageContext对象向四个域范围存取数据
findAttribute方法
:
查找属性方法:先根据小范围的名称进行查找,如果找到了就返回,如果没有找到就会去比其大一个域的范围进行查找。
<%
// request.setAttribute("name","张三");
// session.setAttribute("name","李四");
// application.setAttribute("name","赵六");
pageContext.setAttribute("name","王二");
pageContext.setAttribute("name","张三",pageContext.REQUEST_SCOPE);
pageContext.setAttribute("name","李四",pageContext.SESSION_SCOPE);
pageContext.setAttribute("name","赵六",pageContext.APPLICATION_SCOPE);
%>
<%=pageContext.getAttribute("name")%>
<%--<%=request.getAttribute("name")%>--%>
<%--<%=session.getAttribute("name")%>--%>
<%--<%=application.getAttribute("name")%>--%>
<%=pageContext.getAttribute("name",pageContext.REQUEST_SCOPE)%>
<%=pageContext.getAttribute("name",pageContext.SESSION_SCOPE)%>
<%=pageContext.getAttribute("name",pageContext.APPLICATION_SCOPE)%>
<%=pageContext.findAttribute("name")%>
JSP的动作标签
JSP的动作标签用于在JSP页面中提供业务逻辑功能,避免在JSP页面中直接编写Java代码,造成jsp页面难以维护。
常用的动作标签
<jsp:forward/>
:请求转发。
<jsp:include/>
:包含(动态包含)。
<jsp:param/>
:传递参数。
动态包含的原理
在执行过程中,把包含页面的结果放入包含位置
EL的概述
EL和JSTL一起使用取代JSP页面中嵌入Java代码写法。
EL功能
EL获取数据
EL执行运算
EL获取web开发常用的对象
EL调用Java方法
EL语法
语法:
${ EL表达式 }
<%
// request.setAttribute("name","张三");
// session.setAttribute("name","李四");
// application.setAttribute("name","赵六");
pageContext.setAttribute("name","王二");
pageContext.setAttribute("name","张三",pageContext.REQUEST_SCOPE);
pageContext.setAttribute("name","李四",pageContext.SESSION_SCOPE);
pageContext.setAttribute("name","赵六",pageContext.APPLICATION_SCOPE);
%>
<%=pageContext.getAttribute("name")%>
<%--<%=request.getAttribute("name")%>--%>
<%--<%=session.getAttribute("name")%>--%>
<%--<%=application.getAttribute("name")%>--%>
<%=pageContext.getAttribute("name",pageContext.REQUEST_SCOPE)%>
<%=pageContext.getAttribute("name",pageContext.SESSION_SCOPE)%>
<%=pageContext.getAttribute("name",pageContext.APPLICATION_SCOPE)%>
<%=pageContext.findAttribute("name")%>
${pageScope.name}<br/>
${sessionScope.name}<br/>
${applicationScope.name}<br/>
${requestScope.name}<br/>
<h3>EL简写</h3>
${name}
EL如何获取数据
EL表达式语句在执行的时候,会调用pageContext.findAttribute()方法。分别从page、request、session、application范围查找相应对象,找到就会返回相应对象,找不到返回””(不是null,是空的字符串)。EL所获取的数据需要在四个作用范围中。
<%
String [] arrs = {"aa","bb","cc"};
pageContext.setAttribute("arrs",arrs);
List<Integer> list = new ArrayList<>();
list.add(1);list.add(2);list.add(3);
pageContext.setAttribute("list",list);
Map<String,Integer> map = new HashMap<>();
map.put("kang",20);map.put("wu",19);map.put("yang",20);
pageContext.setAttribute("map",map);
%>
${arrs[0]}<br/>
${list[1]}<br/>
${map.get("wu")}<br/>
${map.wu}<br/>
${map["wu"]}<br/>
EL获取web开发常用对象
常用对象有哪些
EL表达式定义了11个web开发常用对象。使用这些对象可以很方便获取web开发冲的一些常见对象,并可以读取这些对象中的数据。
pageContext :相当于JSP内置对象中pageContext
pageScope :获取指定域下的名称的数据
requestScope :获取指定域下的名称的数据
sessionScope :获取指定域下的名称的数据
applicationScope :获取指定域下的名称的数据
param :在页面中接收请求参数(接收一个名称对应一个值参数)。
paramValues :在页面中接收请求参数(接收一个名称对应多个值参数)。
header :在页面上获取请求头(获取一个key对应一个value 头)
headerValues :在页面上获取请求头(获取一个key对应多个value 头)
cookie :访问cookie的名称和值(${cookie.key.name} ${cookie.key.value})
initParam :获取全局初始化参数的值
为什么学习JSTL
主要和EL来取代传统页面上直接嵌入Java代码写法。提升程序可读性、维护性和方便性。
JSTL的标签库
c标签(core标签库)
fmt标签(国际化标签库)
xml标签
sql标签
jstl函数库(EL函数)
JSTL的入门
引入JSTL的jar包
新建JSP页面
引入标签库
使用JSTL
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<c:set value="bbb" var="name" scope="page">
${name}
if的标签使用
if标签的属性
test属性 :条件
var属性 :将test中的条件的值赋给一个变量,在var中定义变量
scope属性:作用范围
<c:set var="i" value="10" scope="page"></c:set>
<c:if var="flog" test="${i >= 10}" scope="page">
<h3>i:${i}</h3>
</c:if>
<c:if test="${i < 10}">
<h3>小于10</h3>
</c:if>
<c:if test="flog >= 10">
flog:${flog}
</c:if>
foreach标签的使用
<%
String[] arrs = {"aaa","bbb","ccc"};
List<Integer> list = new ArrayList<>();
list.add(1);list.add(2);list.add(3);
Map<String,Integer> map = new HashMap<>();
map.put("kang",20);map.put("wu",19);map.put("yang",20);
pageContext.setAttribute("arrs",arrs);
pageContext.setAttribute("list",list);
pageContext.setAttribute("map",map);
%>
<h3>遍历数组</h3>
<c:forEach var="s" items="${arrs}">
${s}
</c:forEach>
<h3>遍历list</h3>
<c:forEach var="l" items="${list}">
${l}
</c:forEach>
<h3>遍历map</h3>
<c:forEach items="${map}" var="entry">
${entry.key}-${entry.value}
</c:forEach>
<h3>遍历1-100</h3>
<c:forEach var="i" begin="1" end="10" step="1">
${i}
</c:forEach>