JavaWeb:JSP、EL、JSTL
1. JSP入门
1.1 概念
- Java Server Pages: java服务器端页面
- 可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码
- 用于简化书写!!!
1.2 原理
- JSP本质上就是一个Servlet
1.3 JSP的脚本
JSP定义Java代码的方式
<% 代码 %>
:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。<%! 代码 %>
:定义的java代码,在jsp转换后的java类的成员位置。<%= 代码 %>
:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
1.4 JSP的内置对象:
在jsp页面中不需要获取和创建,可以直接使用的对象,jsp一共有9个内置对象。
变量名 | 真实类型 | 作用 |
---|---|---|
pageContext | PageContext | 当前页面共享数据,还可以获取其他八个内置对象 |
request | HttpServletRequest | 一次请求访问的多个资源(转发) |
session | HttpSession | 一次会话的多个请求间 |
application | ServletContext | 所有用户间共享数据 |
response | HttpServletResponse | 响应对象 |
page | Object | 当前页面(Servlet)的对象 this |
out | JspWriter | 输出对象,数据输出到页面上 |
config | ServletConfig | Servlet的配置对象 |
exception | Throwable | 异常对象 |
pageContext、request、session、application为域对象,用于数据共享。
request:依赖请求
response:依赖响应
out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似。
response.getWriter()和out.write()的区别:
① 在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
② response.getWriter()数据输出永远在out.write()之前
1.5 指令
作用:用于配置JSP页面,导入资源文件
格式:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
分类:
① page : 配置JSP页面的- contentType:等同于response.setContentType()
- 设置响应体的mime类型以及字符集
- 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
- import:导包
- errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
- isErrorPage:标识当前也是是否是错误页面。
- true:是,可以使用内置对象exception
- false:否。默认值。不可以使用内置对象exception
② include : 页面包含的。导入页面的资源文件
- <%@include file=“top.jsp”%>
③ taglib : 导入资源
- <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
- prefix:前缀,自定义的
- contentType:等同于response.setContentType()
1.6 注释:
- html注释:
<!-- -->:只能注释html代码片段
- jsp注释:推荐使用
<%-- --%>:可以注释所有
1.7 案例:改造Cookie案例
home.jspn
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.net.URLDecoder" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>itcast</title>
</head>
<body><%//1.获取所有CookieCookie[] cookies = request.getCookies();boolean flag = false;//没有cookie为lastTime//2.遍历cookie数组if(cookies != null && cookies.length > 0){for (Cookie cookie : cookies) {//3.获取cookie的名称String name = cookie.getName();//4.判断名称是否是:lastTimeif("lastTime".equals(name)){//有该Cookie,不是第一次访问flag = true;//有lastTime的cookie//设置Cookie的value//获取当前时间的字符串,重新设置Cookie的值,重新发送cookieDate date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String str_date = sdf.format(date);System.out.println("编码前:"+str_date);//URL编码str_date = URLEncoder.encode(str_date,"utf-8");System.out.println("编码后:"+str_date);cookie.setValue(str_date);//设置cookie的存活时间cookie.setMaxAge(60 * 60 * 24 * 30);//一个月response.addCookie(cookie);//响应数据//获取Cookie的value,时间String value = cookie.getValue();System.out.println("解码前:"+value);//URL解码:value = URLDecoder.decode(value,"utf-8");System.out.println("解码后:"+value);%><h1>欢迎回来,您上次访问时间为:<%=value%></h1><input><%break;}}}if(cookies == null || cookies.length == 0 || flag == false){//没有,第一次访问//设置Cookie的value//获取当前时间的字符串,重新设置Cookie的值,重新发送cookieDate date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String str_date = sdf.format(date);System.out.println("编码前:"+str_date);//URL编码str_date = URLEncoder.encode(str_date,"utf-8");System.out.println("编码后:"+str_date);Cookie cookie = new Cookie("lastTime",str_date);//设置cookie的存活时间cookie.setMaxAge(60 * 60 * 24 * 30);//一个月response.addCookie(cookie);%><h1>您好,欢迎您首次访问</h1>
<span></span><%}%><input></body>
</html>
2. MVC:开发模式
jsp演变历史
- 早期只有servlet,只能使用response输出标签数据,非常麻烦
- 后来又jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中既写大量的java代码,有写html表,造成难于维护,难于分工协作
- 再后来,java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性
MVC:
- M:Model,模型。JavaBean
- 完成具体的业务操作,如:查询数据库,封装对象
- V:View,视图。JSP
- 展示数据
- C:Controller,控制器。Servlet
- 获取用户的输入
- 调用模型
- 将数据交给视图进行展示
- 优缺点:
优点:
- 耦合性低,方便维护,可以利于分工协作
- 重用性高
缺点:
- 使得项目架构变得复杂,对开发人员要求高
- 使得项目架构变得复杂,对开发人员要求高
- M:Model,模型。JavaBean
3. EL表达式
概念:Expression Language 表达式语言
作用:替换和简化jsp页面中java代码的编写
语法:${表达式}
注意:jsp默认支持el表达式的。如果要忽略el表达式
① 设置jsp中page指令中:
isELIgnored="true"
忽略当前jsp页面中所有的el表达式②
\${表达式}
:忽略当前这个el表达式使用:
运算:运算符:
- 算数运算符:
+ - * /(div) %(mod)
- 比较运算符:
> < >= <= == !=
- 逻辑运算符:
&&(and) ||(or) !(not)
- 空运算符:
empty
- 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
${empty list}
:判断字符串、集合、数组对象是否为null或者长度为0${not empty str}
:表示判断字符串、集合、数组对象是否不为null 并且 长度>0
- 算数运算符:
获取值
- el表达式只能从域对象中获取值
- 语法:
${域名称.键名}
:从指定域中获取指定键的值域名称:
① pageScope --> pageContext
② requestScope --> request
③ sessionScope --> session
④ applicationScope --> application(ServletContext)
举例:在request域中存储了name=张三
获取:
${requestScope.name}
${键名}
:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。获取对象、List集合、Map集合的值
对象:
${域名称.键名.属性名}
:本质上会去调用对象的getter方法List集合:
${域名称.键名[索引]}
Map集合:
①
${域名称.键名.key名称}
②
${域名称.键名["key名称"]}
隐式对象:
- el表达式中有11个隐式对象
- pageContext:获取jsp其他八个内置对象
${pageContext.request.contextPath}
:动态获取虚拟目录
4. JSTL
概念:JavaServer Pages Tag Library JSP标准标签库: 是由Apache组织提供的开源的免费的jsp标签。
作用:用于简化和替换jsp页面上的java代码
使用步骤:
- 导入jstl相关jar包
- 引入标签库:taglib指令: <%@ taglib %>
- 使用标签
常用的JSTL标签
① if:相当于java代码的if语句
属性:test必须属性,接受boolean表达式
① 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容
② 一般情况下,test属性值会结合el表达式一起使用
注意:c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签
<%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html> <head><title>if标签</title> </head> <body><%--c:if标签1. 属性:* test 必须属性,接受boolean表达式* 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容* 一般情况下,test属性值会结合el表达式一起使用2. 注意:c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签--%><c:if test="true"><h1>我是真...</h1></c:if><br><%//判断request域中的一个list集合是否为空,如果不为null则显示遍历集合List list = new ArrayList();list.add("aaaa");request.setAttribute("list",list);request.setAttribute("number",4);%><c:if test="${not empty list}">遍历集合...</c:if><br><c:if test="${number % 2 != 0}">${number}为奇数</c:if><c:if test="${number % 2 == 0}">${number}为偶数</c:if></body> </html>
② choose:相当于java代码的switch语句
使用choose标签声明 相当于switch声明
使用when标签做判断 相当于case
使用otherwise标签做其他情况的声明 相当于default
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html> <head><title>choose标签</title> </head> <body><%--完成数字编号对应星期几案例1.域中存储一数字2.使用choose标签取出数字 相当于switch声明3.使用when标签做数字判断 相当于case4.otherwise标签做其他情况的声明 相当于default--%><%request.setAttribute("number",51);%><c:choose><c:when test="${number == 1}">星期一</c:when><c:when test="${number == 2}">星期二</c:when><c:when test="${number == 3}">星期三</c:when><c:when test="${number == 4}">星期四</c:when><c:when test="${number == 5}">星期五</c:when><c:when test="${number == 6}">星期六</c:when><c:when test="${number == 7}">星期天</c:when><c:otherwise>数字输入有误</c:otherwise></c:choose></body> </html>
③ foreach:相当于java代码的for语句
- 完成重复的操作
属性:
begin:开始值
end:结束值
var:临时变量
step:步长
varStatus:循环状态对象
index:容器中元素的索引,从0开始
count:循环次数,从1开始 - 遍历容器
属性:
items:容器对象
var:容器中元素的临时变量
varStatus:循环状态对象
index:容器中元素的索引,从0开始
count:循环次数,从1开始<%@ page import="java.util.ArrayList" %> <%@ page import="java.util.List" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html> <head><title>foreach标签</title> </head> <body><%--foreach:相当于java代码的for语句1. 完成重复的操作for(int i = 0; i < 10; i ++){}* 属性:begin:开始值end:结束值var:临时变量step:步长varStatus:循环状态对象index:容器中元素的索引,从0开始count:循环次数,从1开始2. 遍历容器List<User> list;for(User user : list){}* 属性:items:容器对象var:容器中元素的临时变量varStatus:循环状态对象index:容器中元素的索引,从0开始count:循环次数,从1开始--%><c:forEach begin="1" end="10" var="i" step="2" varStatus="s">${i} <h3>${s.index}<h3> <h4> ${s.count} </h4><br></c:forEach><hr><%List list = new ArrayList();list.add("aaa");list.add("bbb");list.add("ccc");request.setAttribute("list",list);%><c:forEach items="${list}" var="str" varStatus="s">${s.index} ${s.count} ${str}<br></c:forEach></body> </html>
练习:在request域中有一个存有User对象的List集合。需要使用jstl+el将list集合数据展示到jsp页面的表格table中
<%@ page import="cn.itcast.domain.User" %> <%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.Date" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html> <head><title>test</title> </head> <body><%List list = new ArrayList();list.add(new User("张三",23,new Date()));list.add(new User("李四",24,new Date()));list.add(new User("王五",25,new Date()));request.setAttribute("list",list);%><table border="1" width="500" align="center"><tr><th>编号</th><th>姓名</th><th>年龄</th><th>生日</th></tr><%--数据行--%><c:forEach items="${list}" var="user" varStatus="s"><c:if test="${s.count % 2 != 0}"><tr bgcolor="red"><td>${s.count}</td><td>${user.name}</td><td>${user.age}</td><td>${user.birStr}</td></tr></c:if><c:if test="${s.count % 2 == 0}"><tr bgcolor="green"><td>${s.count}</td><td>${user.name}</td><td>${user.age}</td><td>${user.birStr}</td></tr></c:if></c:forEach></table></body> </html>
5. 三层架构:软件设计架构
- 界面层(表示层):用户看的得界面。用户可以通过界面上的组件和服务器进行交互
- 业务逻辑层:处理业务逻辑的。
- 数据访问层:操作数据存储文件。
JavaWeb:JSP、EL、JSTL相关推荐
- WEB阶段5:JSP、EL、JSTL、MVC软件结构
JSP.EL.JSTL.MVC软件结构 回顾 Cookie对象 与Cookie操作相关的方法 Cookie类的方法 作用 Cookie(String name,String value) 构造方法,通 ...
- MySQL、JDBC、HTML、CSS、JavaScript、jQuery、tomcat、Http、Servlet、JSP、EL、JSTL、Maven、Cookie、Session(框架第一部分)
第一章 MySQL 一 .数据库 1.什么是数据库? 所谓的数据库就是指存储和管理数据的仓库 2.数据库有哪些分类? 3.什么是关系型数据库? 底层以二维表的形式保存数据的库就是关系型数据库 stu- ...
- JavaWeb基础(2):熟悉HTMLCSS、Servlet、JSP、EL、JSTL、会话控制、jQuery、JSON、Filter、Listener
1.HTML&CSS 网页的组成 结构:HTML 表现:CSS 行为:JavaScript 一个良好的网页要求结构.表现.行为三者分离 HTML中常用的标签 标题标签:一共6个 <h1& ...
- jsp常见面试题及其知识点、EL、JSTL技术
一.JSP技术 1.jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%=java变量或表达式> - ...
- JAVAWEB开发之JSP、EL、及会话技术(Cookie和Session)的使用详解
Servlet的缺点 开发人员要十分熟悉JAVA 不利于页面调试和维护(修改,重新编译) 很难利用网页设计工具进行页面设计(HTML内容导入到servlet中,用PrintWriter的对象进行输出) ...
- 大前端汇总,EMMET、HTML、XML、CSS、JS、dom4j、JDBC、DButil、 servlet、jsp、EL、JSTl、同步分页、filter、AJAX
第一章 EMMET语法 1. syntax 快捷键介绍 Child : > 相当于创建子标签 nav>ul>li <nav><ul><li>< ...
- JavaBean规范、EL、JSTL、
一:JavaBean规范: 01.JavaBean的规范 什么是JavaBean: 符合某些设计规范的类.为什么需要使用JavaBean: 避免代码重复问题,起到功能重复使用.JavaBean遵循的规 ...
- JavaWeb:JSP 和 JSTL
主要内容 JSP JSP的基础语法 简介 JSP:Java Server Page SUN 公司提供的动态网页编程技术,是 Java Web 服务器端的动态资源. 它相比 html 而言,ht ...
- JavaWeb:JSP
1. JSP概述 1.1 什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态资源.它与html页面的作用是相同的,显示数据和获取数据. JSP全称是Java Se ...
- JSP(EL表达式+JSTL)
目录 文章目录 前言 一.什么是JSP 二.JSP语法 (一).jsp模板元素 (二).jsp脚本表达式 (三).jsp脚本片段(小脚本) (四).jsp声明(成员变量) (五).jsp注释 (六). ...
最新文章
- ZooKeeper学习第二期--ZooKeeper安装配置
- javaSE----eclipse的安装与使用
- 1001. 温度转换
- 程序员面试金典 - 面试题 04.04. 检查平衡性(二叉树高度)
- 收藏!架构师需要掌握的99条铁律
- 硬件木马检测方法概述
- PHP手册翻译日记[1]
- ttk python_python GUI ttk库 -- Apple的学习笔记
- 支配树 / Dominator_Tree(待补)
- 安全防御----防火墙
- 玩转SQL语句之group by 多字段分组查询与having子句,一篇解决你的疑惑!
- python中的scipy库_scipy库中的odeint函数
- Outlook邮件创建的规则失效,可能的原因
- 大学生IT博客大赛最技术50强与最生活10强文章
- 通过百度人脸对比API进行人脸对比
- 【创客空间】相关资料
- 掺铬钛酸锶Cr:SrTiO3晶体基片|NaCl<111>10x10x2.0mm1sp晶体基片|Al2O3蓝宝石晶体基片|齐岳生物
- 张飞实力电子经验(电子学习心路,创业心得)
- 疫情之下:教育APP软件开发对企业的重要性
- python3 学习(2):在网站地图爬虫时的cannot use a string pattern on a bytes-like object 问题的解决方法...
热门文章
- 8.深入分布式缓存:从原理到实践 --- 分布式Redis
- 8. 大型网站架构演化
- 8. Document getElementById() 方法
- sql中用于子查询的几个关键词 any(some是 any的别名),all,in,exists
- ubuntu linux 1604 编译安装tesseract-ocr 4.0
- JAVA-初步认识-第九章-接口-定义interface
- C中的C文件与h文件辨析(转)
- Jmeter性能测试之如何写Java请求测试用例类
- Activity传递数据
- for循环的使用—打印输出各种图形