web笔记九:jsp脚本、jsp标准动作、EL表达式、JSTL标签

前言:在实际开发中,我们不应该使用jsp脚本,页面嵌套各种Java代码维护起来非常麻烦,而且前端开发人员有时候也不具备Java开发能力,jsp标准动作有时候也需要使用jsp脚本导包,使用起来也比较麻烦,所以在开发过程中尽量使用EL表达式搭配JSTL来使用,好的网站架构应该要做到前后端分离,前端页面(jsp)只负责拿到并展示数据,不涉及复杂的逻辑处理。所以jsp脚本和标准动作只需要了解即可,万一哪天我们需要维护以前使用脚本的老系统呢?

一、JSP脚本

JSP脚本有三种:JSP声明、JSP小脚本、JSP表达式

JSP声明:
<%!…%>这是定义的是 实例变量或者实例方法。

JSP Scriptlet(小脚本):
<%…%>:中间可以写Java代码,比如:

<%Student s=new Student; s.setName("abc");%>

这里注意要用分号(;)隔开,因为每一个语句时一个Java语句,语句中的任何代码都是局部变量。

JSP表达式:
<%=…%>:可以写打印语句,其实编译过来就是printWrite.print(…),比如:

<%=s.getName()%>===>相当于Java代码的printWrite.print(s.getName());

这里不能加分号,因为加分号后,就会编译成printWrite.print(s.getName(););,会报错,百分号与等号之间不能有空格

二、JSP指令:
page指令 taglib指令 include指令
一般JSP文件头都会有如下代码:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

三、七大JSP标准动作
jsp:forward: 执行页面转向,将请求的处理转发到下一个页面。
jsp:param: 用于传递参数,必须与其他支持参数曲标签一起使用。
jsp:include: 用于动态引入一个 JSP 页面。
jsp:plugin: 用于下载 JavaBean 或 Applet 到客户端执行。
jsp:useBean: 使用 JavaBean。
jsp:setProperty: 修改 JavaBean 实例的属性值。
jsp:getProperty: 获取 JavaBean 实例的属性值。

四、九大隐式对象
JSPWrite—-out
HttpServletRequest—-request
HttpServletResponse—-response
HttpSession—-session
ServletContext—-application
ServletConfig—-config 初始化类似Servlet,在web.xml中把Servlet-class改成jsp-file标签
Throwable—-exception
PageContext—-pageContext
Object—-page

============================分割线============================

五、EL表达式
在使用EL表达式之前,我们需要先了解11个隐式对象。

EL表达式对应的Java方法
对象集合
pageContext包含request、session、servletContext对象,如:pageContext.servletContext
与属性(attribute)有关
pageScope获得通过jsp脚本page.setAttribute()的值
requestScoperequest.getAttribute()
sessionScoperequest.getSession().getAttribute()
applicationScoperequest.getServletContext().getAttribute()
与请求参数(parameter)有关
paramrequest.getParameter()
paramValuesrequest.getParameterValues()
与请求头部有关
headerrequest.getHeader()
headerValuesrequest.getHeaders()
其他
cookie效果类似于request.getCookie(cookieName),但api没有这个方法
initParamrequest.getServletContext().getInitParameter()

我们通常使用${name}的方式去获取属性值,也就是不指定属性的范围,那么${name}查找的顺序为pageScope-->requestScope-->sessionScope-->applicationScope。如果都没有找到则返回null,。

思考:假如我们程序这么设置属性,那么怎么分别拿到aa.b的属性值呢?

request.setAttribute("a", "a");
request.setAttribute("a.b", "a.b");

我们很快能想到可以使用${a}${a.b},但这是不正确的,正确的拿法是${a}${requestScope["a.b"]}

EL表达式支持简单的运算功能:
加:+
减:-
乘:*
除:/ 和 div
取模:% 和 mod

与:&& 和 and
或:|| 和 or
非:! 和 not

等于:== 和 eq
不等于:!= 和 ne
小于:< 和 lt
小于等于: <= 和 le
大于:> 和 gt
大于等于:>= 和 ge

六、JSTL标签库
EL表达式虽然能满足我们取值的需求,但是对于类似数组循环,判断等逻辑行为就显得力不从心,JSTL标签库封装了很多实用的标签。大体分为五类:
核心标签
格式化标签
JSTL 函数
SQL 标签(不建议使用)
XML 标签(不建议使用)

关于JSTL标签库的使用这里就不再举例说明,需要了解的可以移步到JSP 标准标签库中学习。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值