jsp脚本、jsp标准动作、EL表达式、JSTL标签

https://blog.csdn.net/gx_hxl/article/details/79032331


https://blog.csdn.net/a731604348/article/details/69053921


前言:在实际开发中,我们不应该使用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");%>1

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

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

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

这里不能加分号,因为加分号后,就会编译成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"%>123

三、七大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");12

我们很快能想到可以使用${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 标准标签库中学习。






servlet的三大作用域对象:

request(HttpServletRequest)

session(HttpSession):

application(ServletContext):tomcat启动时创建,tomcat关闭时销毁,整个web的生命周期只有一个

括号内为其对应的类


jsp的九大内置对象:

pageContext(pageContext)也包含了另外八大对象的引用

request(HttpServletRequest)

session(HttpSession)

application(ServletContext)

response(HttpResponse)

config(ServletConfig)

out(JspWriter)

page(Object)

exception(Throwable)

括号内为其对应的类,这些对象都是存在于jsp中的,可以直接使用



jsp的四大作用域对象:

pageContext(pageContext)

request(HttpServletRequest)

session(HttpSession)

application(ServletContext)

括号内为其对应的类

-


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章