EL&JSTL

EL&JSTL(重要)

一、EL技术

1、EL表达式概述

EL(Express Language)表达式可以嵌入jsp页面内部,建设jsp脚本的编写,EL出现的目的是要替代jsp页面脚本的编写。(不能进行逻辑运算)

2、EL从域中取出数据(EL最重要的作用(90%以上))

EL最主要的作用是获得四大域中的数据,格式${EL表达式}

EL获得pageContext域中的值:${pageContextScope.key);}

EL获得request域中的值:${requestScope.key);}

EL获得session域中的值:${sessionScope.key);}

EL获得application域中的值:${applicationScope.key);}

EL从四个域中获得某个值${key;}

---同样是依次从pageContext域,request域,session域,application域中    获取属性,在某个域中获取后将不在向后寻找。

<!-- 模拟取域中的数据 -->

<%

//request存入一个字符串

request.setAttribute("company", "黑马程序员");

//session域中存入一个对象

User user = new User();

user.setId(1);

user.setName("zhangsan");

user.setPassword("123");

session.setAttribute("user", user);

//application域(ServletContext)存入一个集合

List<User> list = new ArrayList<User>();

User user1 = new User();

user1.setId(2);

user1.setName("lisi");

user1.setPassword("456");

list.add(user1);

User user2 = new User();

user2.setId(3);

user2.setName("wangwu");

user2.setPassword("789");

list.add(user2);

application.setAttribute("list", list);

%>

<!-- jsp脚本取出域中的值 -->

<%=request.getAttribute("company")%>

<%out.write("<br>"); %>

<% User sessionUser = (User) session.getAttribute("user");

out.write(sessionUser.getName());%>

<%out.write("<br>"); %>

<% List<User> appList = (List<User>) application.getAttribute("list");

for(User appUser : appList){

if(appUser.getId() == 3){

out.write(appUser.getName());

}

}

%>

<!-- 使用EL表达式获得域中的值 -->

<%out.write("<br>"); %>

${requestScope.company}

<%out.write("<br>"); %>

${sessionScope.user.name}

<%out.write("<br>"); %>

${applicationScope.list[1].name}

<%out.write("<br>"); %>

<!-- 使用el表达式全域查找 -->

${company}

<%out.write("<br>"); %>

${user.name }

<%out.write("<br>"); %>

${list[1].name }

3、EL的内置对象11个(解决客户端接收服务器数据问题)

pageScope,requestScope,sessionScope,applicationScope

---- 获取JSP中域中的数据

param,paramValues     - 接收参数.

--------相当于request.getParameter()  rrquest.getParameterValues()

header,headerValues     - 获取请求头信息

---------相当于request.getHeader(name)

initParam                - 获取全局初始化参数

---------相当于this.getServletContext().getInitParameter(name)

cookie                     - WEB开发中cookie

----------相当于request.getCookies()---cookie.getName()---cookie.getValue()

pageContext            - WEB开发中的pageContext.

----------pageContext获得其他八大对象

${pageContext.request.contextPath}

相当于

<%=pageContext.getRequest().getContextPath%>  这句代码不能实现

获得WEB应用的名称

4、EL执行表达式

例如:

${1+1}

<!--empty 判断某个对象是否为null  是null返回true-->

${empty user}

${user == null?true:false}

二、JSTL技术

1、JSTL概述

JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同el一样也是要代替jsp页面中的脚本代码。JSTL标准标准标签库有5个子库,但随着发展,目前常使用的是他的核心库。

标签库 标签库的URI 前缀
Core http://java.sun.com/jsp/jstl/core c
118N http://java.sun.com/jsp/jstl/fmt fmt
SQL http://java.sun.com/jsp/jstl/sql sql
XML http://java.sun.com/jsp/jstl/xml x
Functions http://java.sun.com/jsp/jstl/functions fn

核心使用就是Core标签库。

2、JSTL下载与导入

JSTL下载:

从Apache的网站下载JSTL的JAR包。进入“http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/”网址下载JSTL的安装包。jakarta-taglibs-standard-1.1.2.zip,然后将下载好的JSTL安装包    进行解压,此时,在lib目录下可以看到两个JAR文件,分别为jstl.jar和standard.jar。其中,jstl.jar文件包含JSTL规范中定义的接口和相关类,standard.jar文件包含用于实现JSTL的.class文件以及JSTL中5个标签库描述符文件(TLD)。

jstl.jar

standard.jar

然后将两个jar包导入我们工作的lib中。

使用jsp的taglib指令导入核心标签库

<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>

快捷键:Alt+/

3、JSTL核心库的常用标签

1)<c:if test=””>标签

其中test是返回boolean的条件

<!-- test代表的返回boolean的表达式 -->

<c:if test="${1==1}">

xxxxx

</c:if>

<c:if test="${1!=1}">

yyyyy

</c:if>

首页用户登录:

<ol class="list-inline">

<!-- 用户没有登录 -->

<c:if test="${empty user}">

<li><a href="login.jsp">登录</a></li>

<li><a href="register.jsp">注册</a></li>

</c:if>

<!-- 用户已经登录 -->

<c:if test="${!empty user}">

<li>${user.name }</li>

<li><a href="#">提出</a></li>

</c:if>

<li><a href="cart.jsp">购物车</a></li>

<li><a href="order_list.jsp">我的订单</a></li>

</ol>

使用session保存用户登录信息。

2)<c:forEach>标签

使用方式有两种组合形式:

<!-- forEach模拟 -->

<!-- for(int i=0;i<=5;i++) {syso(i);} -->

<c:forEach begin="0" end="5" var="i">

${i}<br>

</c:forEach>

<!-- 模拟增强for  productList--List<Product> -->

<!-- for(Product product : productList){syso(product.getPname());} -->

<!-- items:一个集合或数组,var代表集合中的某一个元素(自命名) -->

<c:forEach items="${productList}" var="pro">

${pro.pname}

</c:forEach>

<%

//模拟List<String> strList

List<String> strList = new ArrayList<String>();

strList.add("itcast");

strList.add("itheima");

strList.add("boxuegu");

strList.add("shandingyu");

request.setAttribute("strList", strList);

//遍历List<User>的值

List<User> userList = new ArrayList<User>();

User user1 = new User();

user1.setId(2);

user1.setName("lisi");

user1.setPassword("123");

userList.add(user1);

User user2 = new User();

user2.setId(3);

user2.setName("wangwu");

user2.setPassword("123");

userList.add(user2);

application.setAttribute("userList", userList);

//遍历Map<String,String>的值

Map<String,String> strMap = new HashMap<String,String>();

strMap.put("name", "lucy");

strMap.put("age", "18");

strMap.put("addr", "西三旗");

strMap.put("email", "[email protected]");

session.setAttribute("strMap", strMap);

//遍历Map<String,User>的值

Map<String,User> userMap = new HashMap<String,User>();

userMap.put("user1", user1);

userMap.put("user2", user2);

request.setAttribute("userMap", userMap);

%>

<h1>取出strList的数据</h1>

<c:forEach items="${strList }" var="str">

${str }<br/>

</c:forEach>

<h1>取出userList的数据</h1>

<c:forEach items="${userList}" var="user">

user的name:${user.name }------user的password:${user.password }<br/>

</c:forEach>

<h1>取出strMap的数据</h1>

<c:forEach items="${strMap }" var="entry">

${entry.key }====${entry.value }<br/>

</c:forEach>

<h1>取出userMap的数据</h1>

<c:forEach items="${userMap }" var="entry">

${entry.key }:${entry.value.name }--${entry.value.password }<br/>

</c:forEach>

练习:

遍历Map<User,Map<String,User>>的值

entry.key-----User

entry.value------List<String,User>

Map<User,Map<String,User>>  userMMap = new HashMap<User,Map<String,User>>();

三、JavaEE的开发模式

1、什么是模式?

模式在开发过程中总结出的“套路”,总结出的一套约定俗成的设计模式。

2、JavaEE经历的模式

model1模式

技术组成:jsp+javaBean

model1的弊端:随着业务复杂性 导致jsp页面比较混乱。

model2模式

技术组成:jsp+servlet+javaBean

model2的优点:开发中 使用各个技术擅长的方面。

servlet:擅长处理java业务代码。

jsp:擅长页面的现实。

MVC:---- web开发的设计模式

M:Model---模型 javaBean:封装数据

V:View-----视图 jsp:单纯进行页面的显示

C:Controller----控制器 Servelt:获取数据--对数据进行封装--传递数据--    指派显示的jsp页面

3、JavaEE的三层架构

服务器开发时分为三层

web层:与客户端交互。

service层:复杂业务处理。

dao层:与数据库进行交互。

开发实践时,三层架构通过包结构体现。

MVC与三层架构有什么关系?

客户端 服务器 DB
客户端发起请求,发起访问。 Web层 service层 dao层  

servlet

javaBean

jsp

struts2

springMVC


业务代码

spring


数据库操作的代码

hibernate

mybatis

4、使用三层架构完成商品列表的显示

a、三层架构,包的实现,前缀:公司域名。例如:com.scalpel.xxx

其他包名:com.scalpel.web , com.scalpel.service,  com.scalpel.dao,  com.scalpel.domain,  com.scalpel.utils。(基本这样搭建,每个包下面可以再搭建更小的包。)

b、业务分析:客户端发起请求,发起访问商品列表的请求----->web层servlet接收客户端请求------>找service层ProductService------->dao层ProductDao------>到数据库查找到数据----->List<Product>------>返回dao,service,web----->jsp显示(el+jstl进行显示)。

四、总结

EL表达式:

1、从域中取出数据${域中存储的数据的name}

2、域中的内置对象,${pageContext.request.contextPath}    获取web名称

3、表达式

JSTL标签(核心库):

1、引入标签<%@ taglib uri=""  prefix="c"%>

2、<c: if test="">

3、<c:forEach items="数组或集合"  var="数组或集合中的每一个元素">

JavaEE三层架构+MVC:

web层:收集页面数据,封装数据,传递数据,指定响应的jsp页面。

service层:逻辑业务代码的编写。

dao层:数据库的访问代码的编写。

时间: 2024-10-28 19:18:32

EL&JSTL的相关文章

JavaEE之动态页面技术(JSP/EL/JSTL)

动态页面技术(JSP/EL/JSTL) JSP技术 jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%=java变量或表达式> ----- 会被翻译成service方法内部out.print() 3)<%!java代码%> ---- 会被翻译成servlet的成员的内容 jsp注释:  不同的注释可见范围是不同 1)Html注释:<!--注释内容--> ---可见范围 jsp源码.

12-JSP&amp;EL&amp;JSTL

JSP & EL & JSTL jsp Java Server Page 什么是jsp 从用户角度看待 ,就是是一个网页 , 从程序员角度看待 , 其实是一个java类, 它继承了servlet,所以可以直接说jsp 就是一个Servlet. 为什么会有jsp? html 多数情况下用来显示静态内容 , 一成不变的. 但是有时候我们需要在网页上显示一些动态数据, 比如: 查询所有的学生信息, 根据姓名去查询具体某个学生.  这些动作都需要去查询数据库,然后在网页上显示. html是不支持写

jsp&amp;el&amp;jstl

一.JSP技术 1.jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%=java变量或表达式> ----- 会被翻译成service方法内部out.print() 3)<%!java代码%> ---- 会被翻译成servlet的成员的内容 jsp注释:  不同的注释可见范围是不同 1)Html注释:<!--注释内容--> ---可见范围 jsp源码.翻译后的servlet.页面 显

动态页面技术(JSP/EL/JSTL)

一.JSP技术 1.jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%=java变量或表达式> ----- 会被翻译成service方法内部out.print() 3)<%!java代码%> ---- 会被翻译成servlet的成员的内容 jsp注释:  不同的注释可见范围是不同 1)Html注释:<!--注释内容--> ---可见范围 jsp源码.翻译后的servlet.页面  

jsp+el+jstl

一.JSP技术 1.jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%=java变量或表达式> ----- 会被翻译成service方法内部out.print() 3)<%!java代码%> ---- 会被翻译成servlet的成员的内容 jsp注释:  不同的注释可见范围是不同 1)Html注释:<!--注释内容--> ---可见范围 jsp源码.翻译后的servlet.页面显示

第12章WEB12-JSP&amp;EL&amp;JSTL篇

今日任务? 商品信息的显示教学导航教学目标掌握JSP的基本的使用掌握EL的表达式的用法掌握JSTL的常用标签的使用教学方法案例驱动法1.1 上次课内容回顾:Cookie :就是将数据保存到客户端浏览器的会话技术. 从浏览器获得Cookie :request.getCookies(); 向浏览器回写Cookie :response.addCookie(Cookie cookie); Cookie的相关的API : setPath(String path); -- /day11 /day11/aaa

JavaWeb学习之动态页面技术(JSP/EL/JSTL)

JSP技术 1.jsp脚本和注释 jsp脚本: 1.<% java代码%>    内部的Java代码翻译到service方法的内部 2.<%=java 变量或表达式%>    会被翻译成service方法内部out.print() 3.<%! java 代码%>    会被翻译成servlet的成员(成员变量或者成员方法)的内容 jsp注释:不同的注释可见范围是不同的 1.Html注释:<!--注释内容-->     可见范围有jsp源码.翻译后的servl

十一 JSP&amp;EL&amp;JSTL

1 什么是JSP? 从用户角度看待,是一个网页从程序员角度,其实是一个Java类,他继承了Servlet,所以可以直接说JSP就是一个Servlet 为什么会有JSP?html多数情况下用来显示静态内容,是一程不变的,不支持Java代码.jsp支持Java,动态网页 2 jsp三大指令  page include  taglib page指令: pageCoding:jsp内容编码             extends: 用于指定jsp翻译成java文件后,继承的父类是谁          

EL+JSTL

EL 1.EL(Expression Language) JSP脚本代码:结构混乱,脚本与HTML混合,容易出错代码不易于维护. 为了解决这些问题推出了EL表达式.使用EL表达式来优化程序代码,增加程序可读性. 2.EL表达式的作用: 1.获取域中数据(重点) 2.执行运算(重点) 3.获取web常用对象(重点) 4.调用java方法(了解) 例: 取得JavaBean对象的属性 ${news.title} 取得数组.List.Map类型对象的元素 ${list[0]} 使用各类运算符对原始数据