[db:作者] 发表于 2023-5-29 01:22:59

day24-服务器端渲染技术02

charset=UTF-8″ language=”java” %>h3>%=request.getAttribute(“name”)%>/h3&gt“&lt:EL表达式全称:Expression Language,是表达式语言

EL表达式主要是代替jsp页面的表达式脚本

EL表达式输出数据时,比jsp的表达式脚本简洁

EL表达式基本语法:${key}

底层其实走的还是jsp表达式脚本,可以理解为就是一个语法糖

11.2EL表达式快速入门
el_qs.jsp:


    el表达式的快速入门

el表达式的快速入门

1.jsp 表达式脚本
名字:
2.el 表达式
名字:${name}


       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113534167902413455965.png
       
注意:

EL表达式在输出null时,输出的是空串””
jsp脚本在输出null时,输出的是 “null” 字符串

       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113534167902413426652.png
       
11.3EL常用输出形式
EL表达式常用输出Bean的普通属性,数组属性,List集合属性和map集合属性

应用实例

book.java:
package com.li.entity;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class Book {
    private String name;//书名
    private String[] writer;//作者
    private List reader;//读者
    private Map topics;//评价
    public String getName() {
      return name;
    }
    public void setName(String name) {
      this.name = name;
    }
    public String[] getWriter() {
      return writer;
    }
    public void setWriter(String[] writer) {
      this.writer = writer;
    }
    public List getReader() {
      return reader;
    }
    public void setReader(List reader) {
      this.reader = reader;
    }
    public Map getTopics() {
      return topics;
    }
    public void setTopics(Map topics) {
      this.topics = topics;
    }
    @Override
    public String toString() {
      return "Book{" +
                "name='" + name + '\'' +
                ", writer=" + Arrays.toString(writer) +
                ", reader=" + reader +
                ", topics=" + topics +
                '}';
    }
}

el_output.jsp:




    el表达式输出数据演示

el表达式输出数据演示
readers = new ArrayList();
    readers.add("小李");
    readers.add("小王");
    book.setReader(readers);
    //创建topics
    HashMap topics = new HashMap();
    topics.put("topic1", "这是我看过的最好的动画片");
    topics.put("topic2", "不错的电影~~");
    book.setTopics(topics);
    //把book放入到request域对象中
    request.setAttribute("bookKey", book);
%>
book对象:${bookKey}

book.name=${bookKey.name}

book.writer=${bookKey.writer}

第一个作者book.writer=${bookKey.writer}

book.readers=${bookKey.reader}

第二个读者book.readers=${bookKey.reader}

book.topics=${bookKey.topics}

第一个评价=${bookKey.topics.get("topic1")}

第一个评价=${bookKey.topics["topic1"]}


       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113534167902413483110.png
       
11.4EL运算操作符
EL的运算操作符和java基础的操作符在概念和用法上都是一样的,只是形式上有些变化。

基本语法:${运算表达式}

关系运算

       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113535167902413545691.png
       

逻辑运算

       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113540167902414053274.png
       

算术运算

       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113541167902414195570.png
       


应用实例


    el运算符

el运算符
num1+num2=${num1+num2}
num1>num2?=${num1>num2}


       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113541167902414194513.png
       
11.5EL的empty运算
empty运算可以判断一个数是否为空,如果为空,返回true,否则返回false
以下几种情况为空:
值为null
值为空串时
值是Object类型数据,但长度为零时
list集合,元素个数为零时
map集合,元素个数为零时


应用实例



    el empty的运算

());//为空的list集合
    request.setAttribute("k5", new HashMap());//为空的map集合
%>
k1是否为空=${empty k1}
k2是否为空=${empty k2}
k3是否为空=${empty k3}
k4是否为空=${empty k4}
k5是否为空=${empty k5}


       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113542167902414210628.png
       
11.6EL的三元运算
表达式1?表达式2:表达式3

如果表达式1的值为真,返回表达式2的值,反之返回表达式3的值

       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113542167902414291602.png
       

11.7EL的11个隐含/内置对象
       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113544167902414435796.png
       
下面以pageScope,requestScope,sessionScope,applicationScope四个常用的隐含对象为例子演示。

演示el常用的四个隐含对象(域对象)


    演示el的四个常用的隐含对象(域对象)

演示el的四个常用的隐含对象(域对象)
1.jsp脚本方式获取
2.el方式来获取域对象的数据
request域中的k1=${requestScope.k1}
pageContext域中的k1=${pageScope.k1}
session域中的k1=${sessionScope.k1}
application域中的k1=${applicationScope.k1}


       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113545167902414520342.png
       
11.7.1pageContext对象的使用

我们可以通过pageContext.request.xxx来获取和http协议相关的信息:
通过request对象来获取和HTTP协议相关的数据:

request.getScheme() 它可以获取请求的协议
request.getServerName() 获取请求的服务器 ip 或域名
request.getServerPort() 获取请求的服务器端口号
getContextPath() 获取当前工程路径
request.getMethod() 获取请求的方式(GET 或 POST)
request.getRemoteHost() 获取客户端的 ip 地址
session.getId() 获取会话的唯一标识


例子

       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113545167902414525720.png
       


    pageContext 对象的使用

pageContext 对象的使用

协议: ${ pageContext.request.scheme }
服务器 ip:${ pageContext.request.serverName }
服务器端口:${ pageContext.request.serverPort }
工程路径:${ pageContext.request.contextPath }
请求方法:${ pageContext.request.method }
客户端 ip 地址:${ pageContext.request.remoteHost }
会话 id :${ pageContext.session.id }
使用 jsp 表达式脚本获取如上信息
ip 地址:
会话 id :
...
使用 el 表达式形式获取信息-简化写法
ip 地址: ${req.remoteHost}
获取请求方法: ${req.method}
客户端 ip 地址:${ req.remoteHost }
...


       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113545167902414524656.png
       
12.JSTL 12.1JSTL介绍
JSTL(Java server pages standarded tag library,即JSP标准标签库。
EL表达式是为了替换jsp中的表达式脚本,JSTL是为了替换代码脚本,这样可以使jsp页面变得更加简洁。

JSTL由五个标签库组成:

       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113546167902414632058.png
       

使用JSTL,需要导入相关的jar包:

下载连接:https://tomcat.apache.org/download-taglibs.cgi

       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113546167902414637167.png
       

12.2快速入门
将两个jar包直接复制粘贴到web应用程序的WEB-INF\lib目录下,add as library

       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113546167902414664992.png
       

在jsp页面的引入标签,要放在文件第一行

       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113547167902414759473.png
       

导入jstl jar包后,要重新发布web工程,否则不识别jstl


    jstl的快速入门

jstl的快速入门
2){
      out.println("xxx")
    }
--%>
2}">
    10>2成立~~~


       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113547167902414729075.png
       
12.3core核心库 12.3.1标签
例子:
set标签可以往域中保存数据

等价于 域对象.setAttribute(key,value);
scope 属性设置保存到哪个域
page表示PageContext域(默认值)
request表示Request域
session表示Session域
application表示ServletContext域

var 属性设置 key 是什么
value 属性设置值

例子



    c:set标签的使用

c:set标签的使用


c:set-name的值:${requestScope.name}


       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113547167902414712686.png
       
12.3.2标签
例子:2″>hello


if标签用来做if判断
test属性表示判断的条件(用EL表达式输出)

例子



    c:if标签使用

c:if标签使用

num2}">
    ${num1}>${num2}


       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113547167902414730862.png
       
12.3.3标签
介绍:多路判断。跟switch…case…default非常接近

例子



    c:choose标签的使用


request-> session->application
--%>
k1=${k1}
c:choose标签的使用
   80}">
      ${scope}-成绩优秀!
   
   60}">
      ${scope}-成绩及格!
   
   
      ${scope}-成绩不及格,继续努力!
   


       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113547167902414762911.png
       
12.3.4标签
介绍:c:forEach标签用来遍历输出,主要有4种形式

普通遍历输出i到j
遍历数组
遍历Map
遍历List

例子




    c:forEach标签

c:forEach标签
第一种遍历方式:从i到j

   
   
      [*]排名=${i}
   

第二种遍历方式:遍历数组

    运动名称=${sp}

第三种遍历方式:遍历Map
map = new HashMap();
    map.put("key1", "北京");
    map.put("key2", "上海");
    map.put("key3", "天津");
    request.setAttribute("cities", map);
%>

    城市信息=${city.key}--${city.value}

第四种遍历方式:遍历List
monsters = new ArrayList();
    monsters.add(new Monster(100, "小妖怪", "巡山的"));
    monsters.add(new Monster(200, "大妖怪", "做饭的"));
    monsters.add(new Monster(300, "老妖怪", "打扫位置的"));
    request.setAttribute("monsters", monsters);
%>

    妖怪信息=${monster.id}-${monster.name}-${monster.skill}



       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113547167902414754156.png
       
13.练习
需求分析:使用jsp+servlet+jstl+el完成查询-显示案例,需求如下:

点击超链接,可以显示所有的妖怪信息
要求显示的数据在servlet中准备,并放入到request域对象中
扩展,如果要求增加根据薪水sal条件过滤,怎么处理?

       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113547167902414747286.png
       
       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113547167902414790346.png
       

练习

思路:

       
https://1rscc.1rsc.com/kaibai02/2023/04/20230317113548167902414879598.png
       
总结
以上是真正的电脑专家为你收集整理的day24-服务器端渲染技术02的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得真正的电脑专家网站内容还不错,欢迎将真正的电脑专家推荐给好友。
页: [1]
查看完整版本: day24-服务器端渲染技术02