JSP&&EL&&JSTL

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MyBabyChao/article/details/81938136

JSP

JSP(JavaServer Pages)是什么

JSP是一种支持动态内容开发的网页技术,通过利用特殊的JSP标签插入Java代码到HTML页面。JavaServer Pages组件是一个Java servlet类型,是为了满足Java Web应用程序用户界面的一个角色。

Web服务器如何使用JSP创建网页

  • 浏览器发送HTTP请求到网站服务器。

  • 服务器识别HTTP请求是一个JSP页面,将其转发给JSP引擎。

  • JSP引擎从磁盘加载JSP页面,并将其转换为servlet的内容。
    1)模板文本(html标签)转换为println()语句
    2)JSP元素转换为相应的Java代码

  • JSP引擎把转换后的JSP文件编译成servlet的一个可执行类,并转发原始请求到servlet引擎。

  • 服务器调用servlet引擎加载servlet类并执行它。servlet产生HTML格式输出,servlet引擎传递到服务器。

  • web服务器响应HTTP请求,转发静态的HTML内容到浏览器。

  • 浏览器处理HTTP响应动态生成的HTML页面。

总结
请求->jsp代码–jsp引擎加载、转换、编译–servlet代码->servlet代码–servlet引擎加载、执行–html代码->浏览器显示。

扫描二维码关注公众号,回复: 3068161 查看本文章

JSP生命周期

JSP生命周期是指从创建到破坏的过程。类似于servlet生命周期,不过多了将JSP编译成servlet的过程。

  1. 编译。当JSP从未被编译或代码已被修改,JSP引擎会编译页面。

  2. 初始化。 处理任何请求前调用jspInit(),仅执行一次。和servlet的init()方法一样。

  3. JSP执行。调用_jspService()处理请求,直到JSP被销毁。

  4. JSP销毁。关闭服务器或从服务器中移除是执行。


JSP基本元素

1.小脚本

小脚本(scriptlet)是有效的JAVA语言语句,变量或方法声明或表达式。

语法

<% code fragment %>
//示例
<%
   out.println("Your IP address is " + request.getRemoteAddr());
%>

2.JSP声明

在JSP文件中使用该变量或方法之前,必须先声明变量或方法。

语法:

<%! declaration; %>
//实例
<%! int i = 0; %> 
<%! int a, b, c; %> 
<%! Circle a = new Circle(2.0); %>

3.JSP表示式

JSP表达式元素包含一个脚本语言表达式,它被评估求值,转换为一个字符串,并在JSP文件中的指定输出位置。

语法:

<%= expression %>
//实例
<p>Today's date: <%= (new java.util.Date()).toLocaleString()%></p>

4.JSP注释

标记JSP容器应忽略的文本或语句。

语法:

<%-- This is JSP comment --%>

5.JSP指令

JSP指令影响servlet类的整体结构

语法:

<%@ directive attribute="value" %>
//实例
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

6.JSP动作

JSP动作使用XML语法中的结构来控制servlet引擎的行为

语法:

<jsp:action_name attribute="value" />
//实例
<jsp:forward page = "Relative URL" />

7.JSP隐式对象

JSP支持9个自动定义的对象(可以直接在jsp页面中使用这些对象,不用创建),也称为隐式对象。

更多JSP元素内容参考:JSP基础语法


三大指令

1.page指令

JSP中的page指令用于向容器提供与当前JSP页面相关的指令。可以在JSP页面的任何位置使用page指令进行编码。 按照惯例,page指令被编码在JSP页面的顶部。

语法:

<%@ page attribute = "value" %>

属性
这里写图片描述


2.include指令

include指令用于在编译阶段包括一个文件。这个指令告诉容器在编译阶段将其他外部文件的内容合并到当前JSP文件中。可在JSP页面的任何位置使用include指令进行编码。

语法:

<%@ include file = "relative url" >

通常使用include指令在一个公共主页中包含页眉和页脚。


3.taglib指令

taglib指令声明JSP页面使用一组自定义标签,标识库的位置,并提供了在JSP页面中标识自定义标签的方法。

语法:

<%@ taglib uri="uri" prefix = "prefixOfTag" >
  • uri:属性值解析为容器理解的位置

  • prefix:通知容器什么位置的标记是自定义操作

实例:

<%@ taglib uri = "http://www.example.com/custlib" prefix = "mytag" %>

<html>
   <body>
      <mytag:hello/>
   </body>
</html>

JSP动作标签

1.jsp:include动作

此动作允许将文件插入到正在生成的页面中

语法:

<jsp:include page = "relative URL" flush = "true" />
  • page: 要包括的页面的相对URL
  • flush:布尔属性确定包含的资源是否在包含其缓冲区之前被刷新。

include指令 :把包含的页面所有元素标签全部拿过来输出.

jsp:include:动态包含,把它的运行结果拿过来.

2. jsp:forward动作

动作终止当前页面的操作,并将请求转发到另一个资源

<jsp:forward page = "Relative URL" />

page:包含另一个资源的相对URL。

更多JSP动作参考:JSP动作


JSP九大隐式对象

这里写图片描述

这里讨论下outPageContext对象,其余7个是servlet已经有的。主要参考:jsp学习

out

  • out是什么?

    out的对象类型为JspWriter,通过pageContext对象的getOut方法返回。

  • out的作用

    JSP 页面中的操作和模板数据是通过out来响应回给浏览器的。

  • 如何响应回给浏览器?
    通过与ServletResponsePrintWriter 对象关联,即我们常用的response.getWriter().write(“xxx”)。满足下面任一条件即可关联:

    1. 设置page指令的buffer属性属性为0来关闭out对象的缓存功能
    2. out对象的缓冲区已满
    3. 整个JSP页面结束

默认情况下out对象的缓存功能是打开的


pageContext

pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象封装了对其它8大隐式对象的引用。它自身还是一个域对象,可以用来保存数据。

pageContext与page的区别
这里写图片描述

查看jsp转换为相应的Servlet代码可知:

page:是当前页面转换成Servlet类的实例。

pageContext:javax.servlet.jsp.PageContext 的实例,该对象代表该JSP 页面上下文。

findAttribute()

按顺序在页面(pageContext)、请求(request域)、会话(session域,如果有效)和应用程序范围(application/servletContext)中搜索指定属性,并返回关联的值或 null。

注意:EL表达式中取值就是依靠pageContext.findAttribute()方法的.
另外:pageContext提供了获取8大隐式对象的getter方法,所以可以在EL表达式中通过pageContext来获得8大隐式对象。


EL表达式

EL,即Expression Language。用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。使得我们可以轻松访问存储在JavaBeans的数据,减少在JSP中的java代码。

EL的简单语法

${expr}

expr:指定表达式本身。
${expr}:表示获取表达式expr的值,然后在页面上输出。

JSP EL中最常见的操作符是:.[],这两个运算符用来访问Java Beans和内置JSP对象的各种属性。

例如:${stu.name}就相当于:

<%
    Student stu = (Student)pageContext.findAttribute("stu");
    if(stu != null) out.print(stu.getName());
%>
  • 按顺序在pageContext、request域、session域(如果有效)和application/servletContext域中搜索指定属性stu。.操作符相当于调用stu对象中getName()返回的数据,最后把数据在页面输出。

EL中的基本运算符
这里写图片描述

EL隐式对象
这里写图片描述

xx的范围变量可以理解为xx作用域对象的map,和作用域对象并不相同。若要在EL表示式中获取某一作用域对象,可以通过pageContext来获取

${pageContext.request.queryString}

更过关于EL表示式的内容参考:JSP表达式语言(EL)


JSTL

JSP标准标签库(JSP Standard Tag Library)在JSP规范的基础上,扩充了一个JSP的标签库来完成一些通用任务,比如XML数据处理、条件执行、数据库访问、循环和国际化。

如何使用
- 导入jar包jstl.jar和standard.jar
- 在jsp页面上,使用taglib指令来引入标签库

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

常用标签

  • c:set
<!-- 声明一个对象name,对象的值zhangsan, 存储到了page(默认),指定是session -->
<c:set var="name" value="zhangsan" scope="session"></c:set>

${sessionScope.name }


  • c:if

判断test里面的表达式是否满足,如果满足,就执行c:if标签中的输出 ,c:if 是没有else的。
<c:set var="age" value="18" ></c:set>
<c:if test="${ age > 26 }">
    年龄大于了26...
</c:if>

<c:if test="${ age <= 26 }">
    年龄小于了26...
</c:if>

------------------------------

定义一个变量名 flag  去接收前面表达式的值,然后存在session域中

<c:if test="${ age > 26 }" var="flag" scope="session">
    年龄大于了26...
</c:if>
  • forEach
从1 开始遍历到10 ,得到的结果 ,赋值给 i ,并且会存储到page域中, step , 增幅为2, 
<c:forEach begin="1" end="10" var="i" step="2">
    ${i }
</c:forEach>


-----------------------------------------------


<!-- items : 表示遍历哪一个对象,注意,这里必须写EL表达式。 
var: 遍历出来的每一个元素用user 去接收。 -->
<c:forEach var="user" items="${list }">
    ${user.name } ----${user.age }
</c:forEach>

更多JSTL的内容参考:JavaWeb之JSTL标签库

猜你喜欢

转载自blog.csdn.net/MyBabyChao/article/details/81938136