day13 jsp el jstl

JSP

一个jsp页面在被访问的时候,会由jsp翻译引擎翻译为一个servlet文件去执行,向页面输出数据。
实验:寻找jsp对应的servlet文件→控制台→日志中c盘路径→work→找找找

模板元素

原本页面中的html内容被jsp引擎翻译为servlet

脚本表达式

<%=jsp表达式%>,其中可以填写一个直接量,或者是一个有返回值的表达式。脚本表达式被servlet引擎翻译为servlet文件后,以out.print的方法将表达式结果输出到页面中

脚本片段

<%脚本片段%>
脚本片段的内容会原封不动出现在servlet文件对应的位置,按照java代码执行,脚本片段书写时可以不完整,但是要保证可以拼接成完整的正确的java语句

JSP声明

<!%%> 成员位置

JSP注释

<%–注释–%>,被翻译到servlet文件时被抛弃掉了,找不到了,慎用。
<%//Java注释%>

JSP指令

本身不会产生任何输出,用于规定jsp引擎如何翻译jsp页面。

指令形式作用
page<%@page contentType=" " import= " " session="fasle" errorPage=" " pageEncoding=" " %>指定jsp翻译引擎属性 ,一个页面中可以出现多次,可以出现在页面中的任意一行。
include<%@include file=" "%>引入页面
taglib
隐式对象

直接在jsp页面获取与使用

原对象jsp隐式对象
servletpage
requestrequest
responseresponse
servletconfigconfig
servletcontextapplication
sessionsession
exceptionexception
outout
pageContextpageContext
pageContext
  • 获取其他8个隐式对象 封装了8个get方法
  • 便捷的请求转发
    • pageContext.forward()
  • 作为域对象使用
    • 生命周期 访问jsp→结束访问jsp
    • setAttribute getAttribute removeAttribute getAttributeNames
    • 当前jsp页面共享数据
  • 操作其他域中属性
<head>
    <title>操作域中属性</title>
<%
   //指定域中设置属性    
pageContext.setAttribute("country","China",PageContext.APPLICATION_SCOPE);
//china在web应用范围,重启结束
pageContext.setAttribute("country", "US",PageContext.SESSION_SCOPE);
//session的范围,一次会话,关闭浏览器结束
pageContext.setAttribute("country", "UK",PageContext.REQUEST_SCOPE);
pageContext.setAttribute("country", "Japan",PageContext.PAGE_SCOPE);
%> 
<%=pageContext.getAttribute("country",PageContext.APPLICATION_SCOPE)%>;
<%=pageContext.getAttribute("country",PageContext.SESSION_SCOPE)%>;    
<%=pageContext.getAttribute("country",PageContext.REQUEST_SCOPE)%>;
<%=pageContext.getAttribute("country",PageContext.PAGE_SCOPE)%>;
</head>

  • 自动搜寻域
//在四个域中由小到大搜索指定名称的域属性
pageContext.findAttribute("country");
四大作用域
items作用范围与意义生命周期
ServletContext代表web应用,在整个web应用范围内共享数据Tomact加载web应用→被移除容器或者Tomcat服务器关闭
session代表会话的对象,在会话范围内共享数据request.getSession→session.invalidate主动 / 服务器意外关闭或服务器正常关闭–序列化到磁盘上(钝化)/ 超时关闭30min
request代表请求的对象,整个请求链中共享数据发出请求request对象创建→request对象销毁
pageContext代表当前jsp页面的对象,整个jsp页面内共享数据访问jsp页面,pageContext对象产生→结束访问页面,pageContext对象销毁

标签技术 用html代替java语句

  • 不能设置值,只能获取值
  • 不能遍历值

el表达式

  • ${ }←<%=jsp表达式%>
  • 只能获取四个域中的属性
获取常量、变量
//常量
<%=123%>  
${123}
//变量
<%=pageContext.getAttribute("name")%>
${pageScope.name}

<%=session.getAttribute("name")%>
${sessionScope.name}

<%=application.getAttribute("name")%>
${applicationScope.name}

<%=request.getAttribute("name")%>
${requestScope.name}
//自动搜寻域
<%=pageContext.findAttribute("name")%>
${name}
获取web应用的虚拟路径
<%=pageContext.getRequest().getContextPath()%>
${pagetContext.request.contextPath}
获取数组、链表、映射、JavaBean中的数据

插一嘴,不是缺省应用路径名要填完整

  • 数组
<%
String[] arr = {"a","b","c"};
//要添加到域中才能获取
pageContext.setAttribute("arr",arr);
%>
${arr[0]}
  • 链表
${list[1]}
  • 映射
<%
Map map = new HashMap<String,String>();
map.put("name","张无忌");
map.put("wife","赵敏");
pageContext.setAttribute("map",map);
%>
${map["wife"]}
  • JavaBean 封装数据提供方法
    在一个类中提供私有化属性的get、set方法,一个私有化属性具有get、set就是javabean属性。
    alt+ins shift选择

el表达式—获取计算结果

算术运算
${3/2}//1.5
${3+"2"}//5
逻辑运算 && || ! and or not
关系运算 > < == >= <= !=
empty null 空 ${empty str}
<%
Map map1 = new HashMap();
pageContext.setAttribute("map1",map1);
%>
${empty map1?"空的":"不是空的"}

el表达式的11个内置对象

作用域意义
pageScope代表page域的内置对象
requestScope代表request域的内置对象
sessionScope代表session域的内置对象
applicationScope代表servletcontext域的内置对象
请求头意义
header代表请求头的对象
headerValues代表一些请求头对象,
请求参数意义
param代表请求参数的对象
paramValues代表一些请求参数对象
初始化配置参数意义
initParam获取指定名称的初始化参数
cookie信息意义
initParam获取指定名称的cookie值→Map<String,Cookie>
item意义
pageContext代表页面上下文的对象
补充

在el表达中 对于request对象,使用 setAttribute / getContextPath 这两种方法时,代表两个不同的request对象

  • requestScope
  • pageContext.request.contextPath

jstl

jstl可以设置修改值,用来弥补el表达式的缺陷

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  • 设置 c:set
<c:set></set>
//设置变量
<c:set scope="request" var="name" value="zjn"></c:set>
${name}
//操作映射
<%
 Map map = new HashMap<String,String>();
 //要想获取值,要先将map放到域中
 pageContext.setAttribute("map",map);
%>
//设置map的值 
<c:set target="${map}" property="name" value="张无忌"></c:set>
${map.name}
//操作javabean,get,set方法已经省略
/*
public class Person {
    private String name;
    private int age;
    private String addr;
    public Person() {
    }
    public Person(String name, int age, String addr) {
        this.name = name;
        this.age = age;
        this.addr = addr;
    }
}
*/
<%
Person p = new Person("周芷若",28,"峨眉派");
pageContext.setAttribute("person""p");
%>
<c:set target="${person}" property="name" value="赵敏" > </c:set>
${p.name}
  • 删除值 c:remove
<%
pageContext.setAttribute("soldier","吕布");
request.setAttribute("soldier","典韦");
session.setAttribute("soldier","狂铁");
application.setAttribute("soldier","李信");
%>
<c:remove var="soldier" scope="session"></remove>
//如果不指定域,就全部删除了
<c:remove var="soldier"></remove>
${requestScope.soldier}
  • 判断 <c:if test="条件"> 条件<c:choose> <c:when test="条件">
    条件要用${}括起来
<c:if test="${3>2}">test为判断条件,为true输出标签之间内容,为flase无内容输出</c:if>
<c:choose>
    <c:when test="${1>2}"></c:when>
    <c:when test="${1==2}"></c:when>
    <c:when test="${1<2}"></c:when>
    <c:otherwise></c:otherwise>
<c:choose>
  • 遍历 forEach
<c:forEach begin="0" end="100" step="2" var="i">
${i}
</c:forEach>
//varStatus varStatus封装了当前遍历的状态
/*
current当前这次迭代的(集合中的)项
index当前这次迭代从 0 开始的迭代索引
count当前这次迭代从 1 开始的迭代计数
first用来表明当前这轮迭代是否为第一次迭代的标志
last用来表明当前这轮迭代是否为最后一次迭代的标志
begin属性值
end属性值
step属性值 
*/
<c:forEach begin="0" end="100" step="2" var="i" varStatus="sta">
  ${stat.count}
  ${stat.index}
</c:forEach>
  • 遍历数据结构
<%
List list = new ArrayList();
list.add("123");
list.add(123);
list.add(true);
pageContext.setAttribute("list",list);
%>
<c:foEach items="${list}" var="i">
${i}
</c:foEach>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值