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( ...
随机推荐
- 案例:使用dbms_xplan.display_cursor无法获取执行计划
案例:使用dbms_xplan.display_cursor无法获取执行计划 环境:RHEL 6.5 + Oracle 11.2.0.4 在一次测试中发现使用dbms_xplan.display_cu ...
- NetCore WebAPI开发探索
一.创建项目 新建api项目: 建好之后,一个默认的控制器已经有了: 运行就可以直接访问get接口获取数据: 二.跨平台部署 部署方面,微软已经完善的很好了,基本上算是傻瓜式操作.项目右键选择发布 ...
- Java操作数据库——使用JDBC连接数据库
Java操作数据库——使用JDBC连接数据库 摘要:本文主要学习了如何使用JDBC连接数据库. 背景 数据持久化 数据持久化就是把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应 ...
- PHP SimpleXMLElement::__toString SimpleXML 函数
定义和用法 SimpleXMLElement::__toString - 返回字符串内容 版本支持 PHP4 PHP5 PHP7 不支持 支持 支持 语法 SimpleXMLElement::__to ...
- 20180918 begin
20180918-20190717 风 雅 颂(305,每天一首): 诗经鉴赏, 180918-1030 魔鬼经济学 <唐宋词十七讲>叶嘉莹<最美的宋词> 布谷鸟<诗境浅 ...
- Error 1327 Invalid Drive 的解决办法
出现场景: 当我在安装STM32公司的 STM32 ST-LINK Utility v4.5.0 软件时,弹出了这个错误.弹框的内容大体是说找不到D盘,这里忘记截图了. 我的电脑的硬盘是我另一 ...
- RF自动化测试之元素封装
自动化测试均需要遵循由点到面的规则,然而对于UI自动化,点是最容易发生变化的,如果使用硬链接,那么每次元素的修改都必须修改代码,这对于代码功底薄弱的测试工程师来说,是较为困难的,所以自动化测试需要对底 ...
- CodeForces - 103B(思维+dfs找环)
题意 https://vjudge.net/problem/CodeForces-103B 很久很久以前的一天,一位美男子来到海边,海上狂风大作.美男子希望在海中找到美人鱼 ,但是很不幸他只找到了章鱼 ...
- uva 10189 扫雷
简单的输入 判断周围上下左右组合的八个方向的雷 然后输出 代码 #include <iostream> #include <memory.h> using namespace ...
- a迭代尾声处理
这是小组开发a阶段迭代的成员工具teambition,现阶段a迭代需要最后的整合,同时我们也在开始了b迭代过程,并不断完善在开发工程中我们文档方面的记录