JavaWeb之JSP & EL & JSTL
JSP & EL & JSTL
JSP
Java Server Page
什么是JSP
从用户角度看,就是一个网页。从程序员角度看,就是一个Java类,它继承Servlet,所以可以说JSp就是一个Servlet
JSP存在意义
html多数情况下用来显示静态网页,即只能显示已经写好的内容。但是有时我们需要在网页上显示一些动态数据。例如,根据学生姓名显示该学生所有信息。做这个动作需要访问数据库,才能在网页显示。而html是不支持Java代码的,所有才出现jsp来写Java代码。
JSP的语法
指令写法
格式:<%@ 指令名称 %>
page指令
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="utf-8" session="true" errorPage="error_page.jsp"%>
language属性
language="java"
表示jsp页面可以写Java代码
contentType属性
contentType="text/html; charset=UTF-8"
说明该文件的类型,即使用的编码格式
text/html :MIMEType 这是一个文本,html网页
charset=UTF-8:用utf-8进行编解码
pageEncoding属性
pageEncoding="utf-8"
jsp内容编码
sessioon属性
session="true"
等号后面可选值 true or false
用于控制在这个jsp页面里面,能够直接使用session对象。
具体的区别是,请看翻译后的java文件 如果该值是true , 那么在代码里面会有getSession()的调用,如果是false : 那么就不会有该方法调用,也就是没有session对象了。在页面上自然也就不能使用session了。
errorPage属性
errorPage="error_page.jsp
用来指向发生错误后要显示页面。值为要给错误的页面路径
isErrorPage属性
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
上面的errorPage 用于指定错误的时候跑到哪一个页面去。 那么这个isErroPage , 就是声明某一个页面到底是不是错误的页面。
extends 属性
用于指定jsp翻译成java文件后,继承的父类是谁,一般不用改。
import属性
导包使用的,一般不用手写。
include 指令
<%@ include file="other01.jsp" %>
用来包含另一个jsp页面内容进来。
把另外一个页面的所有内容拿过来一起输出。 所有的标签元素都包含进来。
即把另一个页面与本页面的内容写在同一个Java类中。
taglib 指令
<%@taglib prefix="" uri=""%>
uri: 标签库路径
prefix : 标签库的别名
JSP动作标签
<jsp:include page=""></jsp:include>
<jsp:param value="" name=""/>
<jsp:forward page=""></jsp:forward>
jsp:include标签
<jsp:include page="other02.jsp"></jsp:include>
用于包含指定页面,这里是动态包含,不拿另一个页面的所有内容,只拿其运行结果。
jsp:forward 标签
<jsp:forward page="other02.jsp"></jsp:forward>
用于跳转指定页面,相当于Servlet中request的请求转发。
<%
//请求转发
request.getRequestDispatcher("other02.jsp").forward(request, response);
%>
jsp:param 标签
<jsp:param value="" name=""/>
用于在跳转或包含其他页面时,加入指定参数,与上面两个标签联合使用。
eg:
<jsp:include page="other02.jsp">
<jsp:param value="18" name="gx"/>
</jsp:include>
<jsp:forward page="other02.jsp">
<jsp:param value="18" name="gx"/>
</jsp:forward>
在other02.jsp中获取参数
<br>收到的参数是:<br>
<%= request.getParameter("address")%>
JSP内置对象
所谓内置对象,就是JSP本身存在的对象,不需要创建
- pageContext
- request
- session
- application
以上4个是作用域对象 ,
- 作用域
表示这些对象可以存值,他们的取值范围有限定。 setAttribute 和 getAttribute
使用作用域来存储数据<br>
<%
pageContext.setAttribute("name", "page");
request.setAttribute("name", "request");
session.setAttribute("name", "session");
application.setAttribute("name", "application");
%>
取出四个作用域中的值<br>
<%=pageContext.getAttribute("name")%>
<%=request.getAttribute("name")%>
<%=session.getAttribute("name")%>
<%=application.getAttribute("name")%>
作用域范围大小:
pageContext – request — session – application
四个对象的作用域的区别
pageContext对象【PageContext】
作用域仅限当前页面
可获得其他的8个内置对象。
request对象 【HttpServletRequest】
作用域仅限一次请求,只要与服务器进行交互使服务器作出响应值就失效
session对象 【HttpSession】
作用域限于一次会话(多次请求和响应)中。
application对象 【ServletContext】
整个工程都可以访问, 服务器关闭后就不能访问了。
其他对象
out对象【JspWriter】
用于输出
response对象 【HttpServletResponse】
在该对象输出内容是无论其位置是在out对象的前还是后,该对象的输出先出现。
exception 对象 【Throwable】
用于输出错误信息
page对象 【Object】 —就是这个jsp翻译成的java类的实例对象
相当于this
final java.lang.Object page = this;
config 【ServletConfig】
EL表达式
为了简化jsp代码中的Java代码
格式
${表达式}
如果从作用域中取值,会先从作用域小的开始取。如果没有,再找下一个作用域,直到把四个作用域取完。如果四个作用域都没有值。则不显示。
使用方法
1.取四个作用域中的值
<%
pageContext.setAttribute("name", "pageContext");
request.setAttribute("name", "request");
session.setAttribute("name", "session");
application.setAttribute("name", "application");
%>
<br>使用EL表达式取值<br>
${pageScope.name }
${requestScope.name }
${sessionScope.name }
${applicationScope.name }
2.取数组中的值
<% String[] a = {"gx","hh","fx"};
//先要把值存入作用域中
pageContext.setAttribute("a", a);
%>
<br>使用EL表达式取数组的值<br>
${a[0] } ${a[1] } ${a[2] }
3.取单列集合的值(List)
<% List list = new ArrayList();
list.add(1);
list.add(3);
list.add(5);
list.add(6);
//先要把值存入作用域中
pageContext.setAttribute("list", list);
%>
<br>使用EL表达式取数组的值<br>
${list[0] } ${list[1] } ${list[2] } ${list[3] }
4.取双列集合的值(Map)
<% Map map = new HashMap();
map.put("name", "gx");
map.put("age", "fx");
map.put("hh", "wf");
map.put("c", "hh");
pageContext.setAttribute("map",map);
%>
${map.name } ${map.age } ${map.hh } ${map.c }
注意:map集合的键不能是基本数据类型,如果是基本数据类型,就会报错或什么都不显示。
如果是
map.put("name.aa", "gx");
那么
${map.[name.aa] }
使用 [] 进行取值。
取值的细节
1.从域中取值。 得先存值。
<%
pageContext.setAttribute("name","gx");
session.setAttribute("age",18);
%>
1.指定到某个作用域取值
${pageScope.age }
2.若不指定所取作用域,则先从page里面找,没有去request找,去session,去application
${ name }
3.指定从session中取值
${ sessionScope.name }
2.取值方式
1.如果这份值是有下标的,那么直接使用[]
<% String[] a = {"gx","hh","fx"};
pageContext.setAttribute("a", a);
%>
${a[0] } ${a[1] } ${a[2] }
这里a说的是attribute的name
public void setAttribute(String name, Object value)
2.如果没有下标, 直接使用 .的方式去取
<% User u = new User(18,"gx");
pageContext.setAttribute("u",u);
%>
${u.name } ${u.age }
User为自定义对象,其中有name和age两个成员变量。
一般使用EL表达式,用的比较多的,都是从一个对象中取出它的属性值,比如取出某一个学生的姓名。
EL表达式的11个内置对象
内置对象,即不用声明直接可以使用的对象
${ 对象名.成员 }
pageContext
作用域相关
pageScope
requestScope
sessionScope
applicationScope
头信息相关
header
headerValves
参数信息相关
param
paramValues
全局初始化参数
initParam
JSTL
全称:JSP Standard Tag Library jsp标准标签库
作用:简化jsp的代码编写。 替换 <%%> 写法。 一般与EL表达式配合
如何使用
- 导入jar文件到工程的WebContent/Web-Inf/lib jstl.jar standard.jar
- 在jsp页面上,使用taglib 指令,来引入标签库
- 注意: 如果想支持 EL表达式,那么引入的标签库必须选择1.1的版本,1.0的版本不支持EL表达式。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
此处的prefix="c"中的c只是一个别名,其实只要是一个字符串即可,不过为了简便,及和core匹配,所有有c作为别名。
常用标签
<c:set></c:set>
<c:if test=""></c:if>
<c:forEach></c:forEach>
1.c:set
<!-- 声明一个对象name, 对象的值 zhangsan , 存储到了page(默认) , 指定是session -->
<c:set var="name" value="zhangsan" scope="session"></c:set>
${sessionScope.name }
var ----- 对象名称
value ------ 对象的值
scope ------- 存储的作用域,默认为page(不写该属性的情况下)在此被指定为session作用域。
target ------ 要修改的属性所属的对象
property ------- 要修改的属性
如果指定了target属性,那么property属性也需要被指定。
2.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>
<c:set var="gx" value="18" ></c:set>
<c:if test="${gx >5 }" var="falg" scope="session">
年龄大于5...
</c:if>
<br>${sessionScope.falg }
test ------ 条件
var -------- 于存储条件结果的变量 结果为true or false
scope ---- var属性的作用域
3.c:forEach
从1 开始遍历到10 ,得到的结果 ,赋值给 i ,并且会存储到page域中, step , 增幅为2,
<c:forEach begin="1" end="10" var="i" step="2">
${i }
</c:forEach>
<% user u1 = new user(18,"gx");
user u2 = new user(13,"wf");
user u3 = new user(88,"hh");
ArrayList<user> u = new ArrayList();
u.add(u1);u.add(u2);u.add(u3);
pageContext.setAttribute("u",u);
%>
遍历自定义的对象集合
<c:forEach var="user" items="${u }">${user.name } --- ${user.age }<br></c:forEach>
items ------ 要被循环的信息
begin ----- 开始的元素(0=第一个元素,1=第二个元素)
end ----- 最后一个元素(0=第一个元素,1=第二个元素)
step ------ 每一次迭代的步长
var -------- 代表当前条目的变量名称
varStatus --------- 代表循环状态的变量名称
c:forTokens标签与c:forEach标签有相似的属性,不过c:forTokens还有另一个属性:
其他标签
c:out
用于在JSP中显示数据,就像<%= … >
c:remove
用于删除数据
c:catch
用来处理产生错误的异常状况,并且将错误信息储存起来
c:choose
本身只当做c:when和c:otherwise的父标签
c:when
c:choose的子标签,用来判断条件是否成立
####c:otherwise
c:choose的子标签,接在c:when标签后,当c:when标签判断为false时被执行
c:import
检索一个绝对或相对 URL,然后将其内容暴露给页面
c:param
用来给包含或重定向的页面传递参数
c:redirect
重定向至一个新的URL
c:url
使用可选的查询参数来创造一个URL
总结:
JSP
三大指令
page
include
taglib 三个动作标签
<jsp:include>
<jsp:forward>
<jsp:param>九个内置对象
四个作用域
pageContext
request
session
application out
exception
response
page
config
EL
${ 表达式 }
取4个作用域中的值
${ name }
有11个内置对象。
pageContext
pageScope
requestScope
sessionScope
applicationScope
header
headerValues
param
paramValues
cookie
initParam
JSTL
使用1.1的版本, 支持EL表达式, 1.0不支持EL表达式
拷贝jar包, 通过taglib 去引入标签库
<c:set>
<c:if>
<c:forEach>
JavaWeb之JSP & EL & JSTL的更多相关文章
- JavaWeb 补充(JSP&EL&JSTL)
1. JSP: 1. 指令 2. 注释 3. 内置对象 2. MVC开发模式 3. EL表达式 4. JSTL标签 5. 三层架构 JSP: 1. 指令 * 作用:用于 ...
- JavaEE之动态页面技术(JSP/EL/JSTL)
动态页面技术(JSP/EL/JSTL) JSP技术 jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%= ...
- jsp&el&jstl mvc和三层架构
jsp:java在html中插入java 一.JSP技术 1.jsp脚本和注释 jsp脚本:(翻译成servlet,源码位置apache-tomcat-7.0.52\work\Catalina\loc ...
- 动态页面技术JSP/EL/JSTL
本节内容: jsp脚本和注释 jsp运行原理 jsp指令(3个) jsp内置/隐式对象(9个) jsp标签(动作) EL技术 JSTL技术 JavaEE的开发模式 动态页面技术:就是在html中嵌入j ...
- 《JavaWeb从入门到改行》JSP+EL+JSTL大杂烩汤
title: Servlet之JSP tags: [] notebook: javaWEB --- JSP是什么 ? JSP就是Servlet,全名是"JavaServer Pages&qu ...
- javaweb(3)之JSP&EL&JSTL
JSP(Java Server Page) 介绍 什么是 JSP ? 从用户角度看,JSP 就是一个网页. 从开发者角度看,它其实就是一个继承了 Servlet 的 java 类,所以可以直接说 JS ...
- JavaWeb之动态页面技术JSP/EL/JSTL
一.JSP技术 1.jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%=java变量或表达式> - ...
- 回锅的美食:JSP+EL+JSTL大杂烩汤
title: Servlet之JSP tags: [] notebook: javaWEB --- JSP是什么 ? JSP就是Servlet,全名是"JavaServer Pages&qu ...
- request+response+jsp+el+jstl
response: 1.设置响应行的状态码: response.setStatus(int sc); 2.设置response缓冲区的编码:response.setCharacterEncoding( ...
随机推荐
- Spring中,关于IOC和AOP的那些事
一.spring 的优点? 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很 ...
- Java题库——Chapter12 异常处理和文本IO
异常处理 1)What is displayed on the console when running the following program? class Test { public stat ...
- Slickflow.NET 开源工作流引擎高级开发(五) -- 引擎和外部事件的交互
前言:引擎组件的基本职责是负责流程流转,但是在流转过程中,除了对内部控制逻辑进行实现外,也不可避免的要去调用或者响应外部事件.本文主要描述外部事件的类型,以及调用方法过程. 1. 外部事件的类型 外部 ...
- apache部分报错解决方法
AH00558: 进入apache文件夹下的conf文件夹,打开httpd.conf文件,用ctrl+F找到ServerName,如下图 在下面加上一句: ServerName domain_name ...
- Redis分布式锁的实现原理
原文链接:https://mp.weixin.qq.com/s/y_Uw3P2Ll7wvk_j5Fdlusw
- ubuntu 18.04下安装JDK
一.安装前检查 检查是否已经安装 java -version 二.安装方式 1)通过ppa(源) 2)通过官网安装包安装 JDK官网下载地址 或百度云下载地址,提取码 rzq5 三.安装步骤 (一 ...
- nvprof 使用记录; 以及使用 nvprof 查看tensorflow-gpu 核函数运行记录
最近需要使用 nvprof 此时cuda 程序运行的性能,下面对使用过程进行简要记录,进行备忘: 常用使用命令:nvprof --unified-memory-profiling off python ...
- Linux-3.14.12内存管理笔记【构建内存管理框架(4)】
虽说前文分析内存管理框架构建的实现,提到了find_zone_movable_pfns_for_nodes(),但这里不准备复述什么,仅针对required_movablecore和required_ ...
- Druid-代码段-1-4
所属文章:池化技术(一)Druid是如何管理数据库连接的? 本代码段对应流程1.3,连接可用性测试: //数据库连接可用性测试 protected boolean testConnectionInte ...
- 浅谈JS函数节流及应用场景
说完防抖,下面我们讲讲节流,规矩就不说了,先上代码: <!DOCTYPE html> <html lang="en"> <head> <m ...