A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

林荣彬
   今天主要学习的内容有三个:
一:EL
EL表达式语言:简化JSP的代码,而且减少<%%>.但是不能替换if else和for循环,底层调用的是get方法.
表达式:${EL表达式}
EL的功能:
1. 获取数据:(JSP的四个域)
2. 执行运算:
3. 操作WEB开发的常用的对象:
4. 调用Java中方法:

功能一:获取数据
${ name } <!-- 类似findAttribute("name") 先从page域中查找,没找到去request域中查询,没有找到去session域中找,没有找到就去application域中找 -->
功能二:执行运算
获取数组和list集合的数据需要先将数据放入到域中利用索引获得数据;
注意:"."和[]的区别.  
[]用于有下标的数据(数组,list集合) .用于有属性的数据(map,对象)
如果属性名中包含有特殊的字符.必须使用[]

功能三:操作WEB开发常用的对象
pageScope,requestScope,sessionScope,applicationScope获取JSP中的域中的数据
param.paramValues---接收参数
header,headerValues---获取请求头信息
initParam---获取全局初始化参数
cookie---WEB开发中cookie
pageContext ----WEB开发中的pageContext
IP地址:${ pageContext.request.remoteAddr }
工程路径:${ pageContext.request.contextPath }

二:JSTL
JSTL:JSP标准标签库
作用:JSTL和EL结合.替换页面中<%%>;
使用JSTL,导包需要导两个包,在页面中引入标签库.<%@ taglib uri=”” prefix=””%>
JSTL的标签库:包含了五类标签.
core(核心标签),fmt(国际化标签),xml(XML标签),sql(SQL标签),fn(JSTL提供EL函数库)
JSTL的核心标签的用法
   if:<c:if test="${  }"></c:if>
   forEach:<c:forEach var="" items="${}"></c:forEach>
注意事项:items="不能直接写字符串必须是----${}"

三:MVC
MVC设计模式
M模型层:domain+dao+service
V视图层:JSP
C控制层:servlet
回复 使用道具 举报
邵倩


EL表达式

目的: 简化JSP代码,减少<% %> (不能完全取代 )

语法: ${ EL表达式}

功能一  (从JSP的4个域中)获取数据
功能二  执行算数/逻辑/关系/三元/empty运算
功能三  操作WEB开发中的常用对象 主要掌握以下两个
      ${ cookie.history.value } ---获取名字叫history的cookie的值
      ${ pageContext.request.contextPath } ---获取工程路径
功能四  调用Java中的方法--很少用


JSTL---JSP标准标签库


1.0版本不支持直接使用EL表达式,我们使用的一般是1.1或1.2
EL表达式不能替代if    for循环  
所以我们需要使用JSTL结合EL表达式来完全取代<% %>

JSTL的标签库 包含了5类标签
主要掌握   core(核心标签),fn(JSTL提供EL函数库)

使用JSTL前
引入JSTL的相关jar包 (jstl.jar  standard.jar)
在jsp页面引入jstl标签库:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
或<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

重点掌握<c:if >和<c:forEach >的使用
案例 从数据库获得商品信息 显示到页面上


MVC

动态网页开发模式的发展:
Servlet有缺陷:显示HTML元素的时候麻烦
然后就有了JSP  优点:显示数据方便  缺点: 所有代码都写在JSP里,封装和处理数据时麻烦
(了解)然后就有了JSP+JavaBean的开发模式(占了很长时间,称为JSP的模式一)  优点:显示/封装/处理数据都很方便  缺点: 维护麻烦
(掌握)然后就有了JSP+Servlet+JavaBean模式(JSP的模式二,也被称为MVC的设计模式/思想)   优点 : JSP用于显示数据,JavaBean用于封装/处理数据,Servlet控制

MVC: Model View Controller  模型-视图-控制器
模型层: JavaBean  DAO    Service
视图层:JSP
控制层 :Servlet---获取数据---处理业务---跳转页面
Servlet调用一个JavaBean封装数据,再调用一个JavaBean(实际上是Service层)去处理数据 再由JSP去显示页面

DAO层 要写一个接口 然后让原来的DAO去实现这个接口   Servlet也是如此

回复 使用道具 举报
陈昆明:
25.用EL表达式进行元素查找的功能实现时,如果使用了简写模式(${name}),那么查找范围会从小到大开始进行查找,而且只会找到一个.使用EL表达式的时候,如果该域对象里面的值为空,那么得到的是””,而非EL表达式则会返回null
26.EL的算术运算:会将字符串数字进行转换后再进行计算
pageContext能够获取其他8个内置对象,功能比pageScope强大多了
pageScope只能获取域中的数据
param对象主要功能为接收参数,但是在目前的MVC模式中,这种方式很少使用了,因为现在这些参数一般直接传到Servlet中进行处理了,不会在jsp中处理
27.out标签中的default属性要和value属性(为变量)结合使用               
28.内省技术获得的属性的个数是看get/set方法的,与成员变量无关
回复 使用道具 举报
Do1 中级黑马 2018-6-9 09:06:47
44#
EL的功能:
* 获取数据:(JSP的四个域)
* 执行运算:
* 操作WEB开发的常用的对象:
* 调用Java中方法:--很少用.
【EL获取数据】
<h3>存取是普通的单值数据</h3>
<%
        //pageContext.setAttribute("name", "pValue");
        //request.setAttribute("name", "rValue");
        //session.setAttribute("name", "sValue");
        application.setAttribute("name", "aValue");
%>
<%=pageContext.getAttribute("name") %> <!-- 如果没找到 返回null -->
<%=request.getAttribute("name") %>
<%=session.getAttribute("name") %>
<%=application.getAttribute("name") %>
<hr/>
${ pageScope.name } <!-- 返回的是"" -->
${ requestScope.name }
${ sessionScope.name }
${ applicationScope.name }
<hr/>
${ name } <!-- 类似findAttribute("name") 先从page域中查找,没找到去request域中查询,没有找到去session域中找,没有找到就去application域中找 -->
<h3>获取数组的数据</h3>
<%
        String[] arrs = {"李旭华","李冠希","杨凤","杨如花"};
        pageContext.setAttribute("arrs", arrs);
%>
${ arrs[0] }
${ arrs[1] }
${ arrs[2] }
${ arrs[3] }
<h3>获取List集合的数据</h3>
<%
        List<String> list = new ArrayList<String>();
        list.add("李芙蓉");
        list.add("杨芙蓉");
        list.add("王凤");
        pageContext.setAttribute("list", list);
%>
${ list[0] }
${ list[1] }
${ list[2] }
<h3>获取Map集合的数据</h3>
<%
        Map<String,String> map = new HashMap<String,String>();
        map.put("aaa","李旭华");
        map.put("bbb","杨久君");
        map.put("ccc","李芮");
        map.put("ddd","李凤");
        pageContext.setAttribute("map", map);
%>
${ map.aaa }
${ map.bbb }
${ map.ccc }
${ map.ddd }
<h3>获取对象的数据</h3>
<%
        User user = new User(1,"aaa","123");
        pageContext.setAttribute("user", user);
%>
${ user.id }
${ user.username }
${ user.password }
<h3>获取对象的集合的数据</h3>
<%
        User user1 = new User(1,"aaa","123");
        User user2 = new User(2,"bbb","123");
        User user3 = new User(3,"ccc","123");
       
        List<User> userList = new ArrayList<User>();
        userList.add(user1);
        userList.add(user2);
        userList.add(user3);
       
        pageContext.setAttribute("userList", userList);
%>

${ userList[0].id } - ${ userList[0].username } - ${ userList[0].password }<br/>
${ userList[1].id } - ${ userList[1].username } - ${ userList[1].password }<br/>
${ userList[2].id } - ${ userList[2].username } - ${ userList[2].password }<br/>
回复 使用道具 举报
黄进安:

1.      学习EL表达式,简化了jsp中的代码(Java代码)
功能:
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif  获取数据:  EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回””(注意,不是null,而是空字符串)。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif  执行运算: 利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif  获取web开发常用对象: EL 表达式定义了一些隐式对象,利用这些隐式对象(11个隐式对象,常用: cookie和pageContext
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif  调用Java方法: EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。
注意:
n  不同域存在相同的标识符查找顺序:page>>> request>>>session>>>application
n  .和[]的区别.  
        *[]用于有下标的数据(数组,list集合) .用于有属性的数据(map,对象)
* 如果属性名中包含有特殊的字符.必须使用[]
2.  JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的。使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码
n  导包: jstl.jar 和standard.jar 包
n  在JSP页面引入核心标签库的代码为:
<%@ taglib prefix="c"uri="http://java.sun.com/jsp/jstl/core" %>
n  JSTL的核心标签库标签共13个,从功能上可以分为4类:表达式控制标签、流程控制标签(if)、循环标签(forEach)、URL操作标签。


回复 使用道具 举报
王清松
EL&JSTL
        EL(Expression Language)
                概述
                        简化JSP写法,让JSP代码看起来更结构脉络更加清晰
                语法
                        ${EL表达式}
                功能
                        获取数据
                                数据来源——JSP的四个域
                                        域名——作用范围
                                        pageContext——当前页
                                        request——一次请求
                                        session——一次会话
                                        application——当前工程
                                从指定域获得数据
                                        ${ pageScope.数据的Key }
${ requestScope.数据的Key }
${ sessionScope.数据的Key }
${ applicationScope.数据的Key }
                                                举例:
${ applicationScope.sth }——在application中寻找Key为sth的数据
                                不限定域获得数据
                                        ${数据的Key}
                                                举例:
${sth}——在四个域中寻找key为sth的键值对,然后返回值(从小到大)
                                        目前推断以下两个方法等同(问过辉哥)
EL语法——${String name}
JSP的内置对象pageContext的方法——Object findAttribute(String name)
                                                相同点:假设JSP不止一个域存在Key为sth的数据,那么会从范围最小的域(pageContext)找数据,找不到去高一级的域找值,一直找到最顶层
                                                不同点:如果直到在最后都找不到值
${String name}——返回空字符串""
Object findAttribute(String name)——返回null
                                获取数据中的属性值
                                        一般情况
${Key值.属性名}
                                                举例:
${sth.password}
                                                说明:
假设根据Key(sth)获得的数据获取的数据是个对象user(User类的实例),那么可以通过${sth.password}获取该对象password属性的属性值
                                                附User类部分定义:
public class User
{
        private String password;
        private String nick_name;
        ...
}
                                        对象内部属性命名有特殊符号
${Key值[属性名])}
                                                举例:
${sth[nick_name]}
                                底层实现
                                        通过getXxxxx()方法获取数据,所以要保证对象所属的类必须有相应的getXxxxx()方法
                        执行运算
                                算术运算
                                        基本语法
                                                ${n1+n2}
n1=10;n2=20;
结果:30
                                        自动完成类型转换
                                                ${n1+n2}
n1="10";n2="20";
结果:30
                                        自动舍弃未定义的变量
                                                ${n1+n2+n3}
n1=10;n2=20;未定义n3;
结果:30,不会报错
                                逻辑运算
                                        基本语法
                                                ${n1 < n2}
${n1 lt n2}
结果:true或者false
                                        其他符号
                                                >        gt
<=        le
>=        ge
==        eq
                                关系运算
                                        基本语法
                                                ${n1>n2 &&  n3>n4}
${n1>n2 and n3>n4}
结果:true或者false
                                        其他符号
                                                ||        or
!        not
                                三元运算
                                        ${n1<n2?"正确":"错误"}
结果:"正确":"错误"
                                empty运算
                                        ${user==null}
${empty user}
结果:true或者false
                                        ${user!=null}
${not empty user}
结果:true或者false
                        操作WEB开发的常用的11个对象
                                获取JSP域中的数据(四个域范围)
                                        pageScope
requestScope
sessionScope
applicationScope
                                接收参数
                                        param——接收一个参数
                                                以下两个表达式等同
${param.id}
<%= request,getParameter("id")%>
                                        paramValues——接收多个参数
                                                以下两个表达式等同
${paramValues.hobbies}
String[] getParameterValues("hobbies")  
取数组的值可以如下
${paramValues.hobbies[index]}
                                获取请求头信息
                                        header
                                                一个Key对应一个Value
                                                        以下两个表达式等同
${header["User-Agent"]}——包含特殊字符,所以用${Key值[属性名])}
<%=request.getHeader("User-Agent")%>
                                        headerValues
                                                一个Key对应多个Value
                                获取全局初始化参数
                                        initParam
                                                ${initParam.myName}
结果:Kingdon
                                                附:web.xml部分代码
<context-param>
   <param-name>myName</param-name>
   <param-value>Kingdon</param-value>
</context-param>
                                cookie-WEB开发中的cookie
                                        ${cookie.records.value}
结果:cookie中Key为records的Value值
                                pageContext-WEB开发中的pageContext
                                        IP地址:${pageContext.request.remoteAddr}
工程路径:${pageContext.request.contextPath}
                        调用Java中的方法(少用)
        JSTL(JSP Standard Tag Library)
                版本
                        不支持EL表达式
                                1.0
                        支持EL表达式
                                1.1
                                1.2
                作用
                        JSTL和EL结合替换页面中的<%%>
                                JSTL替换for if else循环等Java代码
                                EL替换获取数据的Java代码
                标签库
                        core——核心标签
                        fmt——国际化标签
                        xml——XML标签(少用)
                        sql——SQL标签(少用)
                        fn——JSTL提供EL函数库
                使用
                        引入JSTL相关的jar包
                        导包——在页面中引入标签库<%@ taglib uri="" prefix=""%>
                                uri/prefix:
1.Java Recources目录下,找到导入的standard.jar
2.standard.jar目录下,找到里面的META-INF文件夹
3.META-INF文件夹中找到标签对应的.tld文件
4.文件内容找到<uri>标签,uri所需设置的值就是这个标签内的值
5.文件内容找到<short-name>,prefix所需设置的值就是这个标签内的值
                                附:c.tld的部分内容
<short-name>c</short-name>
<uri>http://java.sun.com/jsp/jstl/core</uri>
                                注意:注意不要导成1.0的包,1.0不支持EL
                                        1.0
                                                <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
                                        1.1/1.2
                                                <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
                        核心标签core的用法
                                <c:set></c:set>
                                        属性
                                                var——变量名
                                                value——值
                                                scope——存入的域
                                                        page
                                                        request
                                                        session
                                                        application
                                        举例:<c:set var="name" value="Kingdon" scopo="page"></c:set>
                                <c:out></c:out>(少用)
                                        属性
                                                value——输出值
                                                        变量${i}
                                                        常量Hello
                                                default——默认值
                                                        举例:
<c:out value="${city}" default="北京">
结果一:${city}有值,输出值
结果二:${city}没有值,输出默认值——北京
                                                escapeXml——是否需要转义
                                                        true
                                                                举例:
<c:out value="<h1>上海</h1>" escapeXml="true">
结果:上海(以h1标签形式输出)
                                                        false
                                                                举例:
<c:out value="<h1>上海</h1>" escapeXml="false">
结果:<h1>上海</h1>(普通形式)
                                <c:if></c:if>
                                        属性
                                                test——条件
                                                        满足条件,则输出标签中的内容
                                                        不满足条件,不输出任何内容
                                                var——将test结果存入该变量
                                                scope——存入的域
                                        举例
                                                <c:if test="${n1 > n2} var="flag" scope="page"></c:if>
结果:将if的结果存入变量flag中,并存入page域
                                        注意
                                                没有else标签,需要else就再起一个<c:if></c:if>
                                <c:forEach></c:forEach>
                                        遍历数组
                                                属性
                                                        var——变量名
                                                        items——被遍历数组
                                                遍历list
                                                        <c:forEach var="i" items="${arrs}">
        ${i}
</c:forEach>
                                                遍历map
                                                        <c:forEach var="entry" items="${map}">
        ${entry.key}-${entry.value}
</c:forEach>
                                                注意:
${i}是去域中找Key为i的数据
底层代码完成了arrs中元素的抽取,然后存入了相应域中,Key就叫i
                                        完成循环操作
                                                属性
                                                        var——变量名
                                                        begin——开始值
                                                        end——结束值
                                                        step——每次递增量,默认为1
                                                        varStatus——记录遍历状态
                                                                count:当前循环是第几次循环
                                                                index:有下标的数据的下标
                                                例一
                                                        <c:forEach var="i" begin="1" end="10" >
        ${i}
</c:forEach>
结果:1 2 3 4 5 6 7 8 9 10
                                                例二
                                                        <c:forEach var="i" begin="1" end="10" step="2" >
        ${i}
</c:forEach>
结果:1 3 5 7 9
                                                例三
                                                        <c:forEach var="i" begin="1" end="10" step="1" varStatus="status">
        <c:if test="${status.count % 2 ==0}">
                <b>${i}</b>
        </c:if>
        <c:if test="${status.count % 2 !=0}">
                ${i}
        </c:if>
</c:forEach>
结果:1 2(加粗) 3 4(加粗) 5 6(加粗) 7 8(加粗) 9 10(加粗)
                JSTL提供了EL的函数库
                        fn
                                ${fn:contains("hello world","hello")}
                                ${fn:length("helloworld")}
                                ${fn:toLowerCase("ABCDE")}
                                ${fn:split("a-b-c-d","-")}
                                        获得的是一个数组,可以遍历
                                与字符串处理相关的操作
回复 使用道具 举报
使用EL表达式:
        语法:${ EL表达式 }
EL的功能:
        获取数据:(JSP的四个域)
        执行运算:
        操作WEB开发的常用的对象:
        调用Java中方法:--很少用.
JSTL的核心标签的用法:
<c:if var="i"  text="条件"></c:if>
<c:forEach var="i" items='要遍历的对象'>
        ${ i }
</c:forEach>
回复 使用道具 举报

2018/6/7 林瑋

昨天我们把jsp给大致框架和基本使用给学习了一遍,然后呢今天我们还是继续学习一个有关jsp的一些知识点,它们就是EL表达式和JSTL标签库,主要内容讲的就是EL,不过JSTL也很重要.

EL表达式就是为了让jsp代码书写更为简洁而发明的一个表达式,他提供了很多简化表达式的方法,这样我们就不用像之前那样应用<%  %>..等标签在代码中插入代码那样繁琐了,直接${  EL表达式 }这样就好了,其实这个我们之前是见过的,就是在页面中获取数据用的就是${name}等..但是没有深入讲解,只是知道这个东东可以拿来获取数据,直到今天学了才知道原来是这么玩的啊.还有用到的一个就是${pageContext.request.contextPath }了,之前也不知道为什么能这么玩,现在才知道这原来是用配置域对象来获取的.除了这两个EL表达式还有很多方法,我就直接来说EL方法的大体反向,1. 获取数据:就是通过jsp的四个域获取数据的,获取到的数据他们是从小到大查找的:pageContext<request<session<applicationpe.还有一点要注意就是表达式里面要是有特殊符号要用中括号括起来!!但是中括号也不能乱用除了前者大多都是用于数组,和集合了.2. 执行运算:执行运算顾名思义就是在jsp执行算数运算,它也跟我们其他的运算一样,只不过多了一个${ }而已.他有分:算数运算,逻辑运算,关系运算,三元运算和一个empty运算,这五种运算.他的运算符还可以用英文代替,但是比起英文肯定是符号更简单一点啦.EL的WEB开发的一个常用对象有11个,我之前说的那个${ pageContext.request.contextPath }获取工程路径就是通过这些常用对象来使用的,对于这11个常用对象我们其实不用全记只要记两个就好,他们就是cookie和pageContext,这两个相对其他的更要常用和实用一点.
还有一个JSTL,JSTL呢是一个JSP标准标签库,他和EL配合使用,可以很大程度的简化页面,这里要说一下JSTL1.0是不支持的EL表达式的,只有1.1和1.2支持,所以要想用JSTL与EL搭配使用的话就要使用EL1.1跟1.2版本的JSTL;它包含了五类标签库,core,fmt,xml,sql,fn,其中常用及重点的标签库是core(核心标签)和fn(EL函数库标签),那既然JSTL如此方便要怎么用它呢?我们在使用它之前要先引入它的相关jar包,还要在jsp页面上引入标签库,这样就可以使用了.刚刚有说它的常用标签库,而他的常用标签库里又有分常用标签,core的就是:if标签和forEach标签了;其实所有JSTL里的标签库书写方法都一样:<c:?> ?里就是标签名了,使用又是另外一说了,只要你会格式,使用问题都不大,都是要自己去练的;函数库的话,就有种似曾相识的感觉了,没错就是对字符串的操作,我不知道还有没有其他用途今天是只了解了这个.
回复 使用道具 举报
郑学馨
EL:获取数据
JSTL:实现判断

案例一:将数据库中的信息显示到jsp页面上
       项目前期准备:
        步骤一:新建一个数据库,导入数据信息
        步骤二:新建一个项目工程
        步骤三;新建一个与数据库信息对应的Javabean,
       功能实现步骤:
        步骤一:新建一个servlet类(mvc的控制层)
                1.1:new一个service类,
                1.2:利用service对象调用service中的方法
                1.3:将获得的结果保存到session中
        步骤二:新建一个service类(mvc的模型层)
                2.1:new一个dao类
                2.2:调用dao中的方法将获得的结果返回给上一级
        步骤三:新建一个Dao类(mvc的模型层)
                3.1:new一个queryrunner对象
                3.2:创建一个sql语句
                3.3:到数据库查询数据,返回一个javabean对象并返回给上一级
        步骤四:新建一个JSP(MVC的视图层)
                4.1:新建一个表格结构
                4.2:接收页面中保存的session值
                4.3:将session的内容进行遍历,并显示到页面上
回复 使用道具 举报
123
您需要登录后才可以回帖 登录 | 加入黑马