博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JavaWeb开发】EL表达式和JSTL标签的使用
阅读量:3928 次
发布时间:2019-05-23

本文共 3085 字,大约阅读时间需要 10 分钟。

JSP本身的代码块实在是令人抓狂与无语,拆分标签到了令人无语的境地,于是EL表达式和JSTL救星横空出世,救jsp于水火之中。

1.JSTL下载

下载地址:

拉到下面下最新版

在这里插入图片描述
下完解压后进入lib文件夹把两个jar复制到你项目的lib里面并导入项目
在这里插入图片描述

2.EL表达式

书写格式(写几个最常用的,其他用JSTL更规范):

${标识符} 输出变量 而取的值跟内置对象有优先级关系${对象.属性} 输出对象的属性值${empty 对象名?"为空":“不为空”}

使用EL表达式则可以减少很多取值的代码。

这些值是从哪取的呢,实际上就是从四大作用域中获取的。
servlet中的四个作用域分别为page,request,session,application

简单介绍一下四种属性范围(从上到下,范围从小到大):

  • page(pageContext):只在一个页面中保存属性。 跳转之后无效。
  • request:只在一次请求中有效,服务器跳转之后有效。 客户端跳无效
  • session:再一次会话中有效。服务器跳转、客户端跳转都有效。 网页关闭重新打开无效
  • application:在整个服务器上保存,所有用户都可使用。 重启服务器后无效

而EL表达时中的值的优先级也是从范围小的开始先取

page先于request先于session先于application

3.JSTL使用

JSP标准标签库(JavaSeverPages Standard Tag Libary)

同样的也是为了简化jsp代码,一般与EL表达式结合使用
EL表达式多用于取值操作,而JSTL则可以方便我们对集合进行遍历,对数据进行判断等操作。

3.1 jsp中引入JSTL标签

在jsp开头加上

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

注意:core是核心标签,一定是jsp内的jstl/core,并且prefix其实可以自己定,但最好还是用c比较规范

3.2 常用标签

set标签:将值保存在指定的作用域中

<%-- var="变量名"  value="值" scope="保存在哪个作用域(page、request、session、application)"--%>
<%-- 可配合EL表达式取值 --%>${userName}

out标签:将结果输出

<%--取值--%>
<%-- 可以替换成EL,更简单 --%>${userName}

remove标签:删除某个值

<%--删除userName的值--%>

if标签:if判断(单纯的一个判断)

<%--test内是判断条件,一般写EL表达式来当条件--%>
${userName}

choose标签(when标签和otherwise标签):if else判断

<%-- 如果userName=cicheng --%>
${userName}
<%-- 如果userName=此成 --%>
${userName}
<%-- 如果userName以上条件都不符合 --%>
userName=${userName},不符合标准

forEach标签:遍历集合

<%-- 基础用法,用于迭代集合,将users集合依次用user遍历 --%>
${user.name}
${user.password}

着重讲一下forEach标签

全部属性的意义

  • items:迭代的集合
  • var:集合的每一项的别称
  • begin:从哪个下标开始迭代,默认值为0
  • end:迭代到第几个,默认值为集合的长度,即集合.size()
  • step:迭代的步长,默认为1
  • varStatus:迭代项的状态变量名,可以获取迭代项的相关状态
    有begin,end,step三个不变状态,
    count-当前迭代次数,
    current-当前对象,
    first-是否为第一个对象,
    last-是否为最后一个对象,
    index-当前下标

实验代码:

jsp

name=${user.name}
password=${user.password}
status.begin=${status.begin}
status.end=${status.end}
status.count=${status.count}
status.current=${status.current}
status.first=${status.first}
status.last=${status.last}
status.index=${status.index}
-----------------------------------------------

后台测试集合

Servlet

@WebServlet("/TestServlet")public class TestServlet extends HttpServlet {
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8"); List
users=new ArrayList<>(); User user1=new User("此成","123"); User user2=new User("小明","1234"); User user3=new User("小红","12345"); users.add(user1); users.add(user2); users.add(user3); req.setAttribute("users",users); req.getRequestDispatcher("index.jsp").forward(req,resp); }}

User实体

public class User {
private String name; private String password; public User(String name, String password) {
this.name = name; this.password = password; }}

访问servlet运行结果:

在这里插入图片描述
可以很清楚的看到forEach标签的各个属性的作用。

以上为本文全部内容,如果对你有所帮助,请点个赞给作者一些鼓励~

转载地址:http://goign.baihongyu.com/

你可能感兴趣的文章
项目管理师职业道德规范
查看>>
战略管理概述
查看>>
业务流程管理和重组
查看>>
知识管理
查看>>
项目整体绩效评估
查看>>
信息安全系统和安全体系
查看>>
信息系统安全风险识别与评估
查看>>
信息安全系统的组织管理
查看>>
项目时间管理脉络
查看>>
项目成本管理脉络
查看>>
项目质量管理脉络
查看>>
项目人力资源管理脉络
查看>>
项目沟通管理脉络
查看>>
项目风险管理脉络
查看>>
项目采购管理脉络
查看>>
项目管理总结
查看>>
java内存区域的分布
查看>>
JVM的GC是怎么折腾内存的
查看>>
Java跨平台的构思分析
查看>>
linux目录结构名称对照
查看>>