JSP、EL、JSTL

1、JSP

1.1原理:

jsp文件可以同时书写Html和Java的代码,但它的本质还是Java

因为在该文件的内容是Html的,那么后台会将每一行代码用响应流拼接字符串,out.write{“html代码”}

如果写入的是Java的代码,需要用<%代码%>的方式,这样就不会被拼接成响应流字符串

1.2脚本:

Jsp内的脚本,在其中写Java代码。

有两种脚本

<%Java代码%> <%= Java代码%>

1.2.1<%Java代码%>

内容就写java代码,就这么简单!!!

1.2.2<%= Java代码%>

是简化输出的形式

<%= 内容 %> 等于 <% out.write(内容) %>

2、指令

JSP指令用于设置当前JSP页面的属性

2.1page

<!--page:设置当前jsp的属性-->
 <%@page 属性="值" 属性="值" %>

errorPage : 当前jsp中如果有异常,跳转至该页面

import: 在当前jsp导入其他java包

session: true|false,默认是true,设置当前页面是否可以直接使用session对象,false,就是没有session对象,使用时编译报错

2.2taglib

<!--taglib: 引入jstl标签库-->
 <%@ taglib uri="" prefix="前缀" %>

2.3include

<!--include:加入指定文件,达到文件复用-->
 <%@ include file="路径">

3、内置对象

内置对象,就是jsp页面中可以直接使用的对象.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HahBXtjs-1662642427259)(D:/%E5%8D%83%E5%B3%B0%E4%B8%8A%E8%AF%BE/Every%20Day%20Stage2/day43/code/day43_jsp.assets/image-20220908144703453.png)]

这九个对象可以在转译后的xxx_jsp.java中找到这些对象

通过pageContext获得其他八个对象

4、四大域[熟悉]

内置对象中有四个可以当做域对象,存取数据,分别是

解释 值的范围
pageContext 页面域 只有当前页面能使用
request 请求域 在一次请求转发中有效
session 会话域 在一次会话中有效
application 应用域 在整个web应用中有效

四大域都有相同的取值赋值方法:

- 域对象.setAttribute("key",value);
- 域对象.getAttribute("key");

1、——EL表达式

1.1概念

用于简化取值操作

可在jsp中任何位置调用,引号中也可以!

el{}中可以写 运算符、逻辑运算符、关系运算符、三目运算符

1.2作用

纯jsp取值:

<%=request.getAttribute(“username”) %>又臭又长!!!

而现在EL取值:${username}


1.3取域中的值[重点]

四大域中的值都可以取

${域.key}

${key},如果四大域中key值一样,按照page–>request–>session–>application的顺序依次取值,取到值即停止.


如果四大域中key值一样,也可以指定取出某个域中的值

${域对象.key} -->  ${sessionScope.el}
-----------------------------------
<h2>存入四大域值,key=el</h2>
<%
    application.setAttribute("el","appValue");
    pageContext.setAttribute("el","pageValue");
    request.setAttribute("el","reqValue");
    session.setAttribute("el","seValue");
%>
<h3>el取值结果:${el}</h3>
<h3>指定取某个域的值: ${sessionScope.el}</h3>

1.4取值[重点]

(字符串、基本类型、对象、数组、集合)

//字符串
request.setAttribute("str","字符串");
${
    
    str}

//基本类型
request.setAttribute("num",100);
${
    
    num}

//对象
request.setAttribute("user",user);
//取对象
${
    
    user}
//取对象的值,通过反射取方法,方法去掉get就是user.~
${
    
    user.username}

//取数组
int[] array = {
    
    11,22,33};
request.setAttribute("array",array);
${
    
    array[0]}

//取集合
Map map = new HashMap();
    map.put("aka","阿浩");
    map.put("ak47","阿卡司机");
    request.setAttribute("map",map);
${
    
    map.get('aka')}

1.5运算符

+ - * / == != > < >= <= && || ! 
(num > 2 ? '100': 1)

1.6隐式对象

EL表达式内部,可以直接使用的对象.

隐式对象 解释
pageContext page域
pageScope page域
requestScope 请求域
sessionScope 会话域
applicationScope 应用域
cookie 获得cookie

2、JSTL

2.1现有问题

  • EL主要是用于作用域获得数据,虽然可以运作判断,但是得到的都是一个结果,做展示
  • EL不存在流程控制,比如判断
  • EL对于集合只能做单点访问,不能实现遍历操作。比如循环

2.2JSTL的作用

可对EL获取到的数据进行逻辑操作。 与EL合作完成数据的展示。

2.3使用步骤

  1. 项目加入jstl和standard的jar包
  2. 在需要使用jstl标签的页面,中使用taglib引入库
  3. 在需要的地方写标签

2.4核心标签的使用

<!--判断标签-->
<c:if test="${num < 1}">
    输出
</c:if>

<!--循环标签-->
<c:forEach var="i" begin="1" end="10" step="2">
    ${i}<br>
</c:forEach>
var:变量i
begin:从哪里还是,包含本身
end:从哪里接收,包含本身
step:每次进几,可不写,默认为1

<!--增强循环标签-->
<c:forEach var="user" items="${list}">
    <div>${user}</div>
</c:forEach>
var:每次循环集合中得到的对象,可理解成key
items:每次循环得到的对象,可理解为value
相当于用el接收键,获得键对应的值

begin:从哪里还是,包含本身
end:从哪里接收,包含本身
step:每次进几,可不写,默认为1

<c:forEach var=“user” items=" l i s t " > < d i v > {list}"> <div> list"><div>{user}
</c:forEach>
var:每次循环集合中得到的对象,可理解成key
items:每次循环得到的对象,可理解为value
相当于用el接收键,获得键对应的值




猜你喜欢

转载自blog.csdn.net/m0_73050509/article/details/126772229
今日推荐