EL& JSTL

JSP
JSP= HTML + Java + JSP自身的语法
JSP脚本 3个
JSP指令 3个
page指令,设置页面的参数
include指令,用于静态包含页面
如果页面中有公共部分可以抽取,可以单独写入一个页面文件中,使用include包含引入。
include相当于代码的拷贝,在jsp翻译成servlet之前就代码拷贝完成了。支持跨页面编程
taglib指令,用于引入标签库
JSP注释 3个
在什么类型的代码中使用什么类型的注释即可。
JSP内置对象 9个
在jsp内部能直接使用的对象。
out JspWriter 输出对象,数据输出到页面上
pageContext****
域对象
范围:当前页面
无论转发还是重定向,只要页面发生了跳转,pageContext就会销毁。
获取其他八个内置对象
在一些框架中使用。
操作其他三个域对象,获取或存储值
api:
设置值:pageContext.setAttribute(key,value,域范围);
获取值:pageContext.getAttribute(key,域范围)
查找值:pageContext.findAttribute("name");
从四个域中,按照范围从小到大,依次查找指定key的值,如果任意一级找到,就不再继续向后查找。
域范围:
PageContext.PAGE_SCOPE page域,也就是pageContext
PageContext.REQUEST_SCOPE request域
PageContext.SESSION_SCOPE session域
PageContext.APPLICATION_SCOPE application域,也就是ServletContext
四个域的范围排序:
从小到大:
PageContext<ServletRequest<HttpSession<ServletContext
MVC开发模式
代码的解耦合
JSP仅用于结果的展示,纯表现层。尽量不要在jsp中编写java的代码逻辑。
M model
模型层,用于封装数据、处理业务逻辑。
JavaBean、DAO、Service层
V View
视图层,用于展示数据,是和用户交互的一层。
在视图层不要编写逻辑。
JSP
C Controller
控制层,用于指派任务,任务的分发。
Servlet
EL表达式*****
在jsp中简化代码编写的一种表达式语言
和java语法不能互用,也就是说不能在el中编写java代码。
写法:
${ 表达式 } 最终会把表达式执行为一个值。
转义:
\${ 表达式} 会转义掉$,不会把这个表达式作为el执行,而是当字符串直接输出。
用法:
1.运算
empty
String "" null
List new ArrayList() null
判断对象是否为null,如果不为null,并且改对象有长度,长度为0,也会返回true。
2.获取值*****
el只能从域对象中获取值。如果获取不到值,返回空串。
${ key名称 }相当于pageContext.findAttribute,从小到大一次从四个域中获取值。
获取域中存储的对象
1.在Java中,JavaBean的属性是由setter和getter决定的,和成员变量的名称没有关系。
2.获取时el中指定key的名称,而不是存入的数据的变量名。
获取域中存储的list或map集合中的值
list集合和数组获取方式一致,使用下标指定
${ array[0]}
map集合两种获取方式
1.把map看成对象,map中的键值对看成此对象的属性
map.put("user",user);
${map.user.birthday.year}
2.把map看成一个集合,索引值为map中数据的键值
map.put("user",user);
${map["user"]} 引号不能省略
map.put("aaa.bbb",user);
${ map["aaa.bbb"] }
内置对象(隐式对象) 11个
cookie:获取请求中携带到页面上的cookie数组,把数组的每个元素取出,以cookie的name为key,cookie对象为value构造了一个map集合。
获取某个指定名称的cookie的值:${ cookie.名称.value } value不要忘记!
<form action="${pageContext.request.contextPath}/xxx"></form>
注意el两侧不要添加空格
JSTL
对JSP的标签进行补充,方便编写逻辑。
编写步骤:
1.导入jar包。
2.页面上引入标签库
使用taglib指令引入。
<%@ taglib prefix="" uri="" %>
prefix:前缀,任意指定,但是一般有约定俗成的表示法。
3.在页面中,用前缀使用标签
常用标签
核心标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
uri要使用带jsp路径的这一个
if标签
test:接收boolean值,用于判断条件,如果满足才会输出标签内部的内容。
注意:
没有else标签
test中的el表达式外部不要添加空格!!!
foreach标签
普通for循环
属性:
begin:开始值
end:结束值
var:临时变量
step:步长,可以为负数
varStatus:循环状态对象
index:容器中元素的索引,从0开始
count:循环次数,从1开始
增强for循环 for(String s : list)
items:容器对象
var:容器中元素的临时变量
varStatus:循环状态对象
index:容器中元素的索引,从0开始
count:循环次数,从1开始
for循环中产生的值都存储在page域中。

 

 

 

 

JSP:


1. 指令
* 作用:用于配置JSP页面,导入资源文件
* 格式:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
* 分类:
1. page : 配置JSP页面的
* contentType:等同于response.setContentType()
1. 设置响应体的mime类型以及字符集
2. 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
* import:导包
* errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
* isErrorPage:标识当前也是是否是错误页面。
* true:是,可以使用内置对象exception
* false:否。默认值。不可以使用内置对象exception

2. include : 页面包含的。导入页面的资源文件
* <%@include file="top.jsp"%>
3. taglib : 导入资源
* <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
* prefix:前缀,自定义的
2. 注释:
1. html注释:
<!-- -->:只能注释html代码片段
2. jsp注释:推荐使用
<%-- --%>:可以注释所有

3. 内置对象
* 在jsp页面中不需要创建,直接使用的对象
* 一共有9个:
变量名 真实类型 作用
* pageContext PageContext 当前页面共享数据,还可以获取其他八个内置对象
* request HttpServletRequest 一次请求访问的多个资源(转发)
* session HttpSession 一次会话的多个请求间
* application ServletContext 所有用户间共享数据
* response HttpServletResponse 响应对象
* page Object 当前页面(Servlet)的对象 this
* out JspWriter 输出对象,数据输出到页面上
* config ServletConfig Servlet的配置对象
* exception Throwable 异常对象

 

MVC:开发模式


1. jsp演变历史
1. 早期只有servlet,只能使用response输出标签数据,非常麻烦
2. 后来又jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大量的java代码,有写html表,造成难于维护,难于分工协作
3. 再后来,java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性

2. MVC:
1. M:Model,模型。JavaBean
* 完成具体的业务操作,如:查询数据库,封装对象
2. V:View,视图。JSP
* 展示数据
3. C:Controller,控制器。Servlet
* 获取用户的输入
* 调用模型
* 将数据交给视图进行展示

* 优缺点:
1. 优点:
1. 耦合性低,方便维护,可以利于分工协作
2. 重用性高

2. 缺点:
1. 使得项目架构变得复杂,对开发人员要求高

 

 

EL表达式


1. 概念:Expression Language 表达式语言
2. 作用:替换和简化jsp页面中java代码的编写
3. 语法:${表达式}
4. 注意:
* jsp默认支持el表达式的。如果要忽略el表达式
1. 设置jsp中page指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式
2. \${表达式} :忽略当前这个el表达式

5. 使用:
1. 运算:
* 运算符:
1. 算数运算符: + - * /(div) %(mod)
2. 比较运算符: > < >= <= == !=
3. 逻辑运算符: &&(and) ||(or) !(not)
4. 空运算符: empty
* 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
* ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
* ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0
2. 获取值
1. el表达式只能从域对象中获取值
2. 语法:
1. ${域名称.键名}:从指定域中获取指定键的值
* 域名称:
1. pageScope --> pageContext
2. requestScope --> request
3. sessionScope --> session
4. applicationScope --> application(ServletContext)
* 举例:在request域中存储了name=张三
* 获取:${requestScope.name}

2. ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。

 


3. 获取对象、List集合、Map集合的值
1. 对象:${域名称.键名.属性名}
* 本质上会去调用对象的getter方法

2. List集合:${域名称.键名[索引]}

3. Map集合:
* ${域名称.键名.key名称}
* ${域名称.键名["key名称"]}

3. 隐式对象:
* el表达式中有11个隐式对象
* pageContext:
* 获取jsp其他八个内置对象
* ${pageContext.request.contextPath}:动态获取虚拟目录

 

JSTL


1. 概念:JavaServer Pages Tag Library JSP标准标签库
* 是由Apache组织提供的开源的免费的jsp标签 <标签>

2. 作用:用于简化和替换jsp页面上的java代码

3. 使用步骤:
1. 导入jstl相关jar包
2. 引入标签库:taglib指令: <%@ taglib %>
3. 使用标签

4. 常用的JSTL标签
1. if:相当于java代码的if语句
1. 属性:
          * test 必须属性,接受boolean表达式
              * 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容
              * 一般情况下,test属性值会结合el表达式一起使用
  2. 注意:
      * c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签
2. choose:相当于java代码的switch语句
1. 使用choose标签声明         相当于switch声明
      2. 使用when标签做判断         相当于case
      3. 使用otherwise标签做其他情况的声明   相当于default

3. foreach:相当于java代码的for语句

5. 练习:
* 需求:在request域中有一个存有User对象的List集合。需要使用jstl+el将list集合数据展示到jsp页面的表格table中

 

 

三层架构:软件设计架构


1. 界面层(表示层):用户看的得界面。用户可以通过界面上的组件和服务器进行交互
2. 业务逻辑层:处理业务逻辑的。
3. 数据访问层:操作数据存储文件。

 

 

 

案例:用户信息列表展示


1. 需求:用户信息的增删改查操作
2. 设计:
1. 技术选型:Servlet+JSP+MySQL+JDBCTempleat+Duird+BeanUtilS+tomcat
2. 数据库设计:
create database day17; -- 创建数据库
use day17;   -- 使用数据库
create table user(   -- 创建表
id int primary key auto_increment,
name varchar(20) not null,
gender varchar(5),
age int,
address varchar(32),
qq varchar(20),
email varchar(50)
);

3. 开发:
1. 环境搭建
1. 创建数据库环境
2. 创建项目,导入需要的jar包

2. 编码

4. 测试
5. 部署运维

 

posted @ 2018-11-08 19:32  aniymx  阅读(175)  评论(0)    收藏  举报