JavaWeb学习——EL表达式&JSTL

一、EL技术
1.EL 表达式概述
  EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写。

2.EL从域中取出数据(EL最重要的作用)
  jsp脚本:<%=request.getAttribute(name)%>
  EL表达式替代上面的脚本:${requestScope.name}

 EL最主要的作用是获得四大域中的数据,格式${EL表达式}
  EL获得pageContext域中的值:${pageScope.key};
  EL获得request域中的值:${requestScope.key};
  EL获得session域中的值:${sessionScope.key};
  EL获得application域中的值:${applicationScope.key};
  EL从四个域中获得某个值${key};—取全域,同样是依次从pageContext域,request域,session域,application域中获取属性,在某个域中获取后将不在向后寻找

    <%
        //存储字符串
        String str = "aaaaaa";
        pageContext.setAttribute("str", str);
    %>

    <%
        //存储对象
        User user = new User();
        user.setUsername("zhangsan");
        user.setPassword("123");
        request.setAttribute("user", user);
    %>
    <%
        //存贮集合
        User user1 = new User() ;
        user1.setUsername("lisi") ;
        user1.setPassword("123");
        User user2 = new User() ;
        user2.setUsername("wangwu");
        user2.setPassword("345") ;

        List<User> list = new ArrayList<User>() ;
        list.add(user1);
        list.add(user2);

        session.setAttribute("list", list) ;
    %>

<!-- 脚本法取数据  通过内置对象 -->
    <!-- 获得普通字符串 -->
    <%=pageContext.getAttribute("str")%>

    <!-- 获得User对象的值 -->
    <%
        User requestUser = (User) request.getAttribute("user"); 
        out.write(requestUser.getUsername());
    %>

    <!-- 获得List<User>的值 -->
    <%
        List<User> listUser =(List) session.getAttribute("list");
        out.write(listUser.get(1).getUsername());
    %>
    <hr/>
<!-- el表达式取数据 -->
    <!-- 获得普通字符串 -->
    ${pageScope.str}
    <!-- 获得User对象的值 -->
    ${requestScope.user.username}
    <!-- 获得List<User>的值 -->
    ${sessionScope.list[1].username }
    <hr/>
<!-- 全域el -->
    <!-- 获得普通字符串 -->
    ${str }
    <!-- 获得User对象的值 -->
    ${user.username }
    <!-- 获得List<User>的值 -->
    ${list[0].username }
    ${list[1].username }

3.EL的内置对象11个
  pageScope,requestScope,sessionScope,applicationScope
     —- 获取JSP中域中的数据
  param,paramValues - 接收参数.
    相当于request.getParameter() rquest.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}:获得项目的路径

4.EL执行表达式
 例如:

${1+1}
${empty user}:empty表示判断对象是否为空,为空返回true,否则返回false。
${user==null?true:false}

二、JSTL技术
1.JSTL概述
  JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同el一样也是要代替jsp页面中的脚本代码。JSTL标准标准标签库有5个子库,但随着发展,目前常使用的是他的核心库
JSTL概述
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和standar.jar两个jar包导入工程的lib中即可。
  第二步:使用jsp的taglib指令导入核心标签库

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

3.JSTL核心库的常用标签
  1)<c:if test=””></c:if>标签
    其中test是返回boolean的条件

<!-- if判断 -->
    <c:if test="true">
        xxx
    </c:if>
    <c:if test="false">
        123
    </c:if>
    <c:if test="true?true:false">
        1=1
    </c:if>
    <!-- 此处的1=1不会输出,因为true?true:false三目判断是无用的,因为test里面只能接受true或者false,其他字符或者表达式都默认为false -->

  2)<c:forEach></c:forEach>标签
    使用方式有两种组合形式:
    方式1——for循环:

<c:forEach begin="从多少开始" end="到多少结束" var="每次循环的变量"></c:forEach>
对应: for(   i=?         ;   i<>==?      ;     int i )

    方式2——增强for:

<c:forEach items="objs" var="obj "></c:forEach>
对应:   foreach(Object obj : objs)

  注:标签中间是显示输出的数据,因此可以在标签中间加入html代码
  1)遍历List<String>的值
  2)遍历List<User>的值
  3)遍历Map<String,String>的值
  4)遍历Map<String,User>的值
  5)遍历Map<User,Map<String,User>>的值
    entry.key—–User
    entry.value——List

    <!-- foreach方式1——普通for循环 -->
    <c:forEach begin="0" end="5" var="i">
        <br/>${i }
    </c:forEach>
    <br/>
    <%
        //List<String>
        List<String> stringList = new ArrayList<String>() ;
        stringList.add("zhangsan");
        stringList.add("lisi");
        stringList.add("wangwu");
        request.setAttribute("stringList", stringList);

        //List<User>
        User user1 = new User() ;
        user1.setUsername("zhangchi") ;
        user1.setPassword("123");
        User user2 = new User() ;
        user2.setUsername("shige") ;
        user2.setPassword("123");
        User user3 = new User() ;
        user3.setUsername("dashabi");
        user3.setPassword("345") ;  

        List<User> userList = new ArrayList<User>();
        userList.add(user1);
        userList.add(user2);
        userList.add(user3);
        session.setAttribute("userList", userList);

        //Map<String,String>
        Map<String,String> stringMap = new HashMap<String,String>() ;
        stringMap.put("name", "zhangsan");
        stringMap.put("sex", "nan");
        stringMap.put("eamil", "zhangsan@qq.com");
        pageContext.setAttribute("stringMap", stringMap);

        Map<String,User> userMap = new HashMap<String,User>();
        userMap.put("user1",user1);
        userMap.put("user2",user2);
        userMap.put("user3",user3);
        application.setAttribute("userMap", userMap);
    %>

    <!-- foreach方式2——增强for -->
    <h1>遍历stringList的值</h1>
    <c:forEach items="${stringList }" var="str">
        str=${str }<br/>   
    </c:forEach>

    <h1>遍历userList的值</h1>
    <c:forEach items="${userList }" var="user">
        user=${user.username }<br/>
    </c:forEach>

    <h1>遍历stringMap的值</h1>
    <c:forEach items="${stringMap }" var="map">
        ${map }<br/>
    </c:forEach>

    <h1>遍历userMap的值</h1>
    <c:forEach items="${userMap }" var="usermap">
        ${usermap.value.username }<br/>
    </c:forEach>

三、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与三层架构有什么关系?
MVC与三层架构
  javaEE三层架构+MVC

    web层:收集页面数据,封装数据,传递数据,指定响应jsp页面
    service层:逻辑业务代码的编写
    dao层:数据库的访问代码的编写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值