栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

EL&&JSTL&&ThreadLocal

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

EL&&JSTL&&ThreadLocal

1.EL

1.1.什么是El表达式

​ expression Language: 表达式语言, jsp2.0之后内置在jsp里面

​ 目的:为了使JSP写起来更加简单, 取值(取的域对象里面存的值)更加简单。(代替脚本 <% %>)
1.2. EL表达式的用途

​ 1.获取数据. 获取的是域(request,session,ServletContext)对象中存储的数据

2.EL执行运算
3. 使用EL表达式获取cookie中的数据

1.3 el获取域对象的值

语法:${requestScope|sessionScope|applicationScope.属性名};

​ 快捷写法:${属性名}, 属性名就是存在域对象里面的key
如果request,session,application同时存在且同名的话,快捷写法是从小到大获取的,但是在项目中一般不会这样子写。el表达式是直接写在body里面的,不需要写在jsp的java代码块里面
1.4 el表达式对数组,list,map,User对象的代码描述
数组和list集合都可以通过: ${域名[元素下标]}
map集合可以通过: ${域名.get(“key”)}
user对象的属性可以通过: ${域名.属性值}获取
1.4 使用el获取cookie里面的值

语法:${cookie.cookie的name.value}

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    使用el表达式获取存储在cookie中的数据


    <%--
        jsp里面是内置session对象,有了session对象,那么浏览器就会携带一个名为"JSESSIONID"的cookie
        我们的目标就是获取"JSESSIONID"的值
    --%>
    <%
        cookie[] cookies = request.getcookies();
        String cookievalue = null;
        if (cookies != null) {
            for (cookie cookie : cookies) {
                if (cookie.getName().equals("JSESSIONID")) {
                    cookievalue = cookie.getValue();
                }
            }
        }
    %>
    使用原始方式获取的JSESSIONID的值为: <%=cookievalue%>
<%-- ${cookie}表示获取这次请求中的所有cookie对象 ${cookie.JSESSIONID}表示获取名为"JSESSIONID"的cookie对象 ${cookie.JSESSIONID.value}表示获取名为"JSESSIONID"的cookie对象的value --%> 使用EL表达式获取JSESSIONID的值为: ${cookie.JSESSIONID.value} JSTL表达式

1.1 什么是JSTL标签库
JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。这个JSTL标签库没有集成到JSP的, 要使用的话, 需要导jar包.
jar包如下链接
链接:https://pan.baidu.com/s/1onIX3N3ARDJ_qESllCtHow
提取码:o7rf
1.2 JSTL标签库的作用
为了简化在jsp页面上操作数据; eg: 遍历数据 判断数据等
jstl简单遍历数据

 <%--
        jstl中的forEach标签是用来代替for循环语句

        目标1: 在浏览器上显示0-9的数字
            begin属性: 从哪个下标开始遍历, 如果不写默认是从0开始
            end属性: 到哪个下标结束遍历,如果不写默认是遍历到集合/数组的最后一个元素
            step属性: 表示遍历时候的步长,默认步长是1
            var属性: 表示将遍历的结果存放进域对象时候的key
            items:要遍历的数据
    --%>

	${i}

jstl使用foreach遍历集合


    使用forEach标签遍历集合中的数据


<%
    ArrayList list = new ArrayList<>();
    list.add("金");
    list.add("木");
    list.add("水");
    list.add("火");
    list.add("土");
    request.setAttribute("list",list);
%>

    ${name} <%--金 木 水 火 土 --%>


展示到前端数据样例

  展示页面



    <%--
        遍历出域对象里面的list中的每一个user
    --%>
    
        
序号 用户名 语文 数学 英语
${vst.index} ${user.username} ${user.chinese} ${user.math} ${user.english}

取出域对象中的集合,然后将集合中的数据展示到表格中
varStatus属性:
遍历出来的每一个元素都拥有这一些状态,比如: index(下标)、count(序号、计数)、first(是否是第一个)
last(是否是最后一个)、current(当前元素)
这些状态会被封装到一个对象中,这个对象又会被存储到page域对象中,而varStatus就是指定这个封装了
状态的对象存储进域对象时候的key

ThreadLocal

在“事务传递参数版”中,我们必须修改方法的参数个数,传递链接,才可以完成整个事务操作。如果不传递参数,是否可以完成?在JDK中给我们提供了一个工具类:ThreadLocal,此类可以在一个线程中共享数据。

​ java.lang.ThreadLocal,该类提供了线程局部 (thread-local) 变量,用于在当前线程中共享数据。ThreadLocal工具类底层就是一个Map,key存放的当前线程,value存放需要共享的数据
DBUtil的update方法,如果不传入connection,只能使用默认的事务提交方式,如果传入connection又不能保证connection对象完全一致,所以需要使用到ThreadLocal来控制,DruidUtil代码如下:

public class DruidUtil {
    private static ThreadLocal threadLocal = new ThreadLocal<>();
    private static DataSource dataSource;
    static {
        try {
            //1. 创建Properties对象
            Properties properties = new Properties();
            //2. 将配置文件转换成字节输入流
            InputStream is = DruidUtil.class.getClassLoader().getResourceAsStream("druid.properties");
            //3. 使用properties对象加载is
            properties.load(is);
            //druid底层是使用的工厂设计模式,去加载配置文件,创建DruidDataSource对象
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static DataSource getDataSource(){
        return dataSource;
    }

    
    public static Connection getConnection() throws SQLException {
        Connection connection = threadLocal.get();
        if (connection == null) {
            //说明threadLocal中还没有存储连接
            connection = dataSource.getConnection();
            //将连接存储到threadLocal中
            threadLocal.set(connection);
        }
        return connection;
    }

    public static void clear() throws SQLException {
        //先将conn的autoCommit属性设置回true
        threadLocal.get().setAutoCommit(true);
        threadLocal.get().close();
        //将conn从ThreadLocal中移除
        threadLocal.remove();
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/445927.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号