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

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

1、JSP脚本前端

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

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

JSP Scriptlet(小脚本):
<%…%>:中间能够写Java代码,好比:后端

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

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

JSP表达式:
<%=…%>:能够写打印语句,其实编译过来就是printWrite.print(…),好比:数组

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

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

2、JSP指令:
page指令 taglib指令 include指令
通常JSP文件头都会有以下代码:session

<%@ 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"%>

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

4、九大隐式对象
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

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

5、EL表达式
在使用EL表达式以前,咱们须要先了解11个隐式对象。

EL表达式 对应的Java方法
对象集合
pageContext 包含request、session、servletContext对象,如:pageContext.servletContext
与属性(attribute)有关
pageScope 得到经过jsp脚本page.setAttribute()的值
requestScope request.getAttribute()
sessionScope request.getSession().getAttribute()
applicationScope request.getServletContext().getAttribute()
与请求参数(parameter)有关
param request.getParameter()
paramValues request.getParameterValues()
与请求头部有关
header request.getHeader()
headerValues request.getHeaders()
其余
cookie 效果相似于request.getCookie(cookieName),但api没有这个方法
initParam request.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

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

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