关于jsp:JSPELJSTL

20次阅读

共计 3148 个字符,预计需要花费 8 分钟才能阅读完成。

JSP 介绍

JSP 和 Servlet 都是由 SUN 公司提供的一门动静 web 资源开发技术。
JSP 看起来像一个 HTML,和 HTML 不同的是,JSP 中能够书写 Java 代码,能够通过 Java 代码显示动态数据。
JSP 实质上就是一个 Servlet。

JSP 的由来
1.Servlet 实质是一段 Java 程序,适宜解决业务逻辑,不适宜向外输入一个(残缺的复合标准的)html 网页。
2.HTML 就是一个页面的开发技术,适宜作为网页进行输入,然而 html 是一个动态 Web 资源开发技术,无奈展现动态数据(HTML+AJAX)。
3.JSP 也是一个页面的开发技术,能够输入 html 网页,并且 JSP 能够通过 Java 代码展现动态数据。
JSP 的呈现,既解决了 Servlet 不适宜输入网页的问题,也解决了 HTML 无奈展现动态数据的问题

为什么说 JSP 实质是一个 Servlet?

在 JSP 第一次被拜访时,会翻译成一个 Servlet 程序。拜访 JSP 后看到的 html 网页,其实是翻译后的 Servlet 执行的后果。(也就是说,拜访 JSP 后看到的网页,是 JSP 翻译后的 Servlet 输入到浏览器的。)

JSP 的执行流程

  1. 当浏览器申请服务器中的某一个 JSP 文件(例如:localhost:8080/day11-jsp/test.jsp),服务器会依据申请资源的门路去寻找该文件:
  2. 如果找到了,JSP 翻译引擎会将 JSP 翻译成一个 Servlet 程序(JSP—-> xxx.java—-> xxx.class), 而后 Servlet 程序再执行,执行的后果是向浏览器输入一个 HTML 网页!
  3. 如果没有找到,服务器将会响应一个 404 页面,告诉浏览器申请的资源不存在。

JSP 表达式

格局:<%= 常量、变量、表达式 %>
作用:计算表达式的后果,将后果输入到浏览器中,由浏览器负责解析并显示。

<%= "Hello JSP..." %>
<% String name = "林青霞"; %>
<%= name %>
<%= 100+123 %>
<%= Math.random() %>

留神:JSP 表达式中能够书写合乎 Java 语法的代码,然而不能写 Java 语句 (外部不能写分号;)
JSP 脚本片段
格局:<% 若干 Java 语句 %>

<!-- 在页面上输入 5 行 "hello JSP" -->
<%
    for(int i=0; i<5; i++){out.write("Hello JSP...<br/>");
    }
%>

JSP 正文
格局:<%– JSP 正文内容 –%>
面试题:考查 JSP 中的 JSP 正文、Java 正文、html 正文

<%-- 
<% out.write("aaaaa<br/>"); %>
 --%>
<% //out.write("bbbbb<br/>"); %>
<!-- 
<% out.write("ccccc<br/>"); %>
 -->

问题:(1)下面输入的三行内容,在拜访时,会显示哪一行内容?

第一行被 JSP 正文给正文了,JSP 正文的内容不会参加翻译,也不会执行,更不会发送给浏览器,也不会在浏览器上显示。

第二行被 Java 正文给正文了,放在脚本片段中的内容会参加翻译,会将其中的 Java 代码复制到翻译后的 Servlet 中,但因为代码被正文了,所以不会执行,也不会发送给浏览器,更不会在浏览器上显示。

第三行被 html 正文给正文了,html 正文在 JSP 中是模板元素,正文自身会发送给浏览器,正文中的脚本片段会参加翻译,其中的 java 代码也会执行,也会将内容(ccccc)发送给浏览器,但因为发送到浏览器后的 ccccc 被 html 正文包裹,因而也不会显示在浏览器上。

(2)下面输入的三行内容,哪一行会发送到浏览器中?(不论是否显示)

其中第三行内容会发送到浏览器中,但不会显示,因为前后有 html 正文。

JSP 指令
指令的格局:<%@ 指令名称 若干属性申明 … %>

<%@ page language="java"%>

language 属性用于指定以后 JSP 应用的开发语言,目前只有 java 语言反对,能够省略不写!

<%@ page import="java.util.Date"%>

mport 属性用于导入包,如果不导入包,在应用其余包下的类时,就须要在类名后面加上包门路,例如:
java.util.Date date = new java.util.Date();

<%@ page pageEncoding="UTF-8"%> 

pageEncoding 属性是用于指定以后 JSP 应用的编码,Eclipse 工具会依据这个编码保留 JSP 文件。

JSP 标签技术

EL 表达式
格局:${常量 / 表达式 / 变量}
作用:
(1)计算放在其中的表达式的后果,将后果输入在以后地位。
(2)次要作用:用于从域对象中获取数据,将获取到的数据输入在以后地位。

获取常量、表达式、变量的值(变量得先存入域中)
域对象:pageContext、request、session、application
例入

String name="马云";
request.setAttribute("name123" , name);

在 EL 表达式中书写变量, 底层会依据变量名到四个作用域中寻找该名称的属性值

如果找到对应的属性值, 就间接返回, 输入到以后地位; 如果找不到就接着寻找
直到找完四个作用域, 最初还找不到就什么都不输入!
到四个作用域中寻找的程序为: pageContext->request->session->application

获取作用域中数组或汇合中的元素

// 申明一个数组, 为数组增加元素, 并将数组存入到域中
String[] names = {"刘德华", "郭富城", "张学友", "拂晓"};
request.setAttribute("names", names);
// 将申请转发到 jsp, 在 JSP 中获取域中的数组中的元素
request.getRequestDispatcher("/02-el.jsp").forward(request, response);

JSP 中的代码:

<%-- 获取从 Servlet 转发带过去的域中的数组中的元素 --%>
${names[0] } <%-- 刘德华 --%>
${names[1] } <%-- 郭富城  --%>
${names[2] } <%-- 张学友 --%>
${names[3] } <%-- 拂晓 --%>

JSTL 标签库

其中罕用的标签如下:

<c:set></c:set> -- 用于往域中增加属性,或者批改域中已有的属性值
(1)var -- 指定存入作用域中的属性名称
(2)value -- 指定存入作用域中属性的值
(3)scope -- 指定将属性存入哪一个作用域中, 默认值是 page, 示意 pageContext 域
可取值: a)page 示意 pageContext 域 b)request 示意 request 域
    c)session 示意 session 域 d)application 示意 ServletContext 域
    
<c:if></c:if> -- 结构简略的 if…else…构造语句
test 属性 -- 指定一个布尔表达式,当表达式的后果为 true 时,将会执行(输入)c:if 标签中的内容,如果表达式后果为 false, 将不会输入 c:if 标签中的内容

<c:forEach></c:forEach> -- 对汇合或数组等中元素进行循环遍历或者是执行指定次数的循环.
(1)items: 指定须要遍历的汇合或数组
(2)var: 指定用于接管遍历过程中的每一个元素
(3)begin: 指定循环从哪儿开始
(4)end: 指定循环到哪儿完结
(5)step: 指定循环时的步长, 默认值是 1
(6)varStatus: 用于示意循环遍历状态信息的对象, 这个对象上有如下属性:
    first 属性: 示意以后遍历是否是第一次, 若是, 则返回 true;
    last 属性: 示意以后遍历是否是最初一次, 若是, 则返回 true;
    count 属性: 记录以后遍历是第几次

正文完
 0