session和el表达式
Posted 何必怀念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了session和el表达式相关的知识,希望对你有一定的参考价值。
2015/1/21 ## 回顾昨天案例 ## # 模拟购物车; >> 基本步骤; |-- 显示所有的书籍; |-- 制作书记列表/模仿数据库; |-- 参见昨天示例; |-- 制作查看详情链接; |-- 参见昨天示例; |-- 显示购物车中的所有商品; |-- request.getSession(); --- 得到session对象; |-- 假定购物车的名字 "cart"; |-- 用集合制作购物车; |-- 可以用泛型限定购买的商品类型; |-- 遍历; |-- 先判断!null; |-- 输出购物车中商品的名字; |-- 制作购买链接; |-- request.getSession(); --- 得到session对象; |-- 获取购物车; |-- 判断,如果是第一次进入,将购物车绑定到session上; |-- 将商品添加到购物车; |-- 提供返回链接; # Cookie和Session的关系; >> 当本地Cookie被禁用之后,Session将失效; |-- 解决方案 |-- 重写URL; |-- response.encodeURL(String str); |-- 注意,该方法需要重写所有URL; |-- 原理:将jsessionID带到超链接里; # Session的生命周期; >> 新建; |-- 第一次创建; >> 运行; |-- > 钝化 --- 序列化到磁盘上; 活化 < --- 从磁盘上反序列化到内存中; >> 销毁; ## JSP和EL表达式 ## # 基本概念; >> Java Server Page |-- 一个可以嵌入java代码和html代码的界面; >> 基本运行流程; |-- 当客户端第一次访问jsp的时候,服务器会将其中的java抽出编译成为servlet; |-- 然后分离出HTML代码,显示在浏览器上; |-- 最后会将编译完成的class文件返回给客户端; # 基本语法; >> JSP表达式; |-- <%= %> 声明一个表达式,其中不能有分号,因为是用于输出, 内部语句被out.println();包裹; |-- <% %> 声明一个片段,其中主要存放Java代码; |-- Java代码片段中支持Java注释; |-- <!-- --> 声明一个注释,会被发送给客户端, 其中如果嵌套<% %>表达式的话,内部的代码会被执行; 但执行完毕的结果依然会被作为HTML的注释发送到客户端; |-- <%-- --%> jsp注释;内部代码在编译时会被忽略; |-- <%! %> 声明一个变量或方法;内部代码会被放到service方法外部; # JSP指令; >> taglib指令 |-- 导入一个外部的标签库; >> <%@include file="地址" %> --- 静态包含; |-- 包含一个外部界面; 该指令将被包含的界面中的源码全部获取; 和发起包含的文件一起编译; |-- 动态包含;<jsp:include page="地址"></include> |-- 包含的两个文件会分别编译; >> <%@ page language="java " import="java.util.*" pageEncoding="UTF-8"%> |-- import --- 导入需要使用的包; |-- pageEncoding --- 告知浏览器界面使用哪种编码进行显示; |-- contentType --- 告知浏览器界面使用哪种编码进行显示; |-- language --- 声明界面包含的语言,可以不写; |-- errorPage --- 可以在源码中生成一个Exception对象; >> jsp标签 |-- <jsp:forward page="add"></jsp:forward> 实现转发; |-- <jsp:param value="20" name="xxx" /> 转发中实现携带参数; |-- 该标签无法解决中文参数传递的问题; # JSP九大内置对象; >> 基本概念; |-- 由JSP本身定义好的一些对象,这些对象不需要声明可以直接使用; >> 九个内置对象; |-- request > 四大作用域中的一个; > 作用于每次请求; |-- response |-- pageContext > 四大作用域中的一个; > 作用于当前页面; > 可以通过它操作其他三个域对象; > 可以通过它获取其他八个内置对象; > 可以依次从四个域范围中找值; > 实现转发和包含功能; |-- session > 四大作用域中的一个; > 作用于每次会话; |-- exception |-- application |-- ServletContext > 四大作用域中的一个; > 作用于整个servlet; |-- config |-- out > 在输出是默认输出到页面缓冲区中(默认8KB); > 可以将buffer关闭,让数据直接输出到界面; > 也可以写出后直接采用flush();将数据刷到response缓存中; |-- page # JavaBean >> 基本概念; |-- 简单java类 |-- 有一定的规范 |-- 用于封装数据; >> 开发模型; |-- JSP+JavaBean; |-- MVC M: javabean; V: jsp+html C: servlet; ## EL表达式 ## # 基本概念; >> 替代Java代码; >> 进行算术计算; >> 从域中搜索值; # 基本格式; >> ${放在域范围中的变量} |-- 内部实现原理; |-- pageContext.findAttribute("值"); >> 只能写在JSP界面上面; >> 在指定的域中搜索; |-- ${requestScope.name} |-- ${sessionScope.name} |-- ${applicationScope.name} |-- ${pageScope.name} (默认范围,可以不写) >> 两种运算符; |-- 【.】 > .后跟取值名称; > 注意 --- EL不支持.调用方法; |-- 【[]】 > 取值需要加上""/‘‘ ; > 当对数组进行取值时,可以加也可以不加; > 对于数组只能使用[]操作; >> 获取集合; |-- 使用[]获取对应角标元素; |-- 获取Map集合; |-- map集合可以用. 后跟字符串获取元素; |-- 可以用[]跟上""/‘‘获取元素; >> EL的三元运算符; |-- ${表达式?值1:值2} |-- ${seesionScope.loginedUser==null ?"未登录":"欢迎"} |-- EL表达式不支持字符串相关运算,即连接符等用法; # EL的11个内置隐式对象; >> 总结如下; 1.requestScope 2.sessionScope 3.applicationScope 4.pageScope //--------------通过以上4个内置对象可以对4大域进行访问 //--------------下面的内置对象用处不大, 5.param 6.paramValues 这两个对象封装了表单参数 7.header 8.headerValues 这两个对象封装了HTTP请求头 9.initParam 封装了web.xml中 配置 10.pageContex 封装了 9大内置对象中的 pageContext 11.cookie 封装了cookie信息 # EL函数 >> 基本概念; |-- 简化页面中静态方法的调用,使用EL函数代替JAVA代码. >> 使用步骤; |-- 在外部定义Java工具类; |-- 配置tld文件; |-- 从tomcat的配置中寻找然后替换相关标签内容; |-- <uri> |-- <function> |-- 在JSP中引入tld文件; |-- 然后就可以在JSP中调用EL自定义函数; >> 实际使用; |-- SUN已经定义了足够的函数; |-- 基本不需要自己定义新的函数;
以上是关于session和el表达式的主要内容,如果未能解决你的问题,请参考以下文章
怎么样用el表达式获得保存在session中的hashmap的值(根据hashmap的键)