day10_ELexpression&EL函数与之前复习
来源:互联网 发布:mysql经典入门书籍 编辑:程序博客网 时间:2024/06/03 15:46
1.1 Cookie
1.客户端(浏览器端)保存信息的技术.
2.服务器要求客户端保存一些键值对.浏览器在适当的时机就会发送给服务器.
3.HTTP请求中的体现.
服务器要求浏览器记住: set-cookie:name=tom
浏览器带给服务器: Cookie:name=tom
1>设置最长有效时间(setMaxAge)
-1 ==>
浏览器一旦关闭,cookie失效.(cookie保存在浏览器内存中)
0 ==>
发送到浏览器立即失效,通常用于删除已有cookie.(把之前的cookie覆盖.覆盖要保证cookie的 路径和键相同)
正数 ==>
单位是秒. 表示最长有效时间(保存到硬盘中);
2>设置cookie的路径
1>cookie不设置路径,默认路径 取当前路径. 例如: http://localhost:8080/Day10/AServlet ==> http://localhost:8080/Day10
2>cookie 会把键值对带给 自己路径下的所有子路径.
3>设置cookie的域(了解)
跨主机共享cookie的应用
music.baidu.com
zhidao.baidu.com
map.baidu.com
以上主机,想要共享cookie,该cookie如何设置?
1.设置cookie的domain为”.baidu.com”
2.设置cookie的path为”/”
1.2 Session
1.2.1 简介
服务器端保存数据的技术.
1.2.2 使用过程
当浏览器连接到服务器的时候, 如果发现浏览器没有携带sessionID过来.
服务器会在内存中开辟一个空间(session),并把sessionID(session的唯一标示)以cookie的方式发送给浏览器.下次浏览器再来访问的时候,
会携带sessionID, 服务器发现 有sessionID 就可以找到在内存中对应的session.
1.2.3 如何操作?
1>获得session, request.getSession();
2>session中的常见操作
4个常用方法
setAttributegetAttributeremoveAttributegetAttributeNames
3>其他方法
inValidate() 立即让session失效.
1.2.4 一些问题
一、session标示一次会话. 会话的范围?
1.session的开始
==> 第一次访问服务器.
2.结束
第一: 浏览器关闭.(保存sessionID的cookie默认有效时间是-1)
第二: 超过session设置的有效时间.默认30分钟. web.xml
=> <session-config><sessiont-timeout>
二、session能不能跨项目?
不能跨项目.
三、session在一个项目中可以对项目中的任意路径共享数据吗?
保存sessionID的cookie的路径是 项目==> /Day10
1.2.5 servlet技术中的3大域.
application
==>servletContext : 范围是整个项目,只有一个servletContext对象, 所有servlet的组件都能访问到.
应用: 保存全局的配置.
session
==> HttpSession : 范围是一次会话. 一个项目中存在几个Session呢? 一个没有保存sessionID的浏览器连接到服务器就会开启一个会话.有多少个浏览器访问就至少有多少个session.
应用:购物车,验证码,登录信息
request
==> HttpServletRequest : 范围是一次请求之内. 存在几个request域?当前正在处理的请求有多少个.
应用:转发中共享数据.
servlet技术3大组件
1.servlet 2.filter 过滤器 *.do *.action3.listener 监听器
2.JSP技术
java server page
2.1 该技术干嘛的?
servlet先出现.只有servlet的时候,servlet又要处理逻辑又要负责输出html. 在servlet中输出 html 太痛苦. 推出了jsp技术.
专注于显示.
2.2 jsp的运行机制.
.jsp =(第一次访问jsp的时候)
=> .java
==> .class(servlet)
2.3 位置
jsp编译成.java之后的目录在tomcat的 work目录下.
2.4 JSP中的脚本
<%%> : 直接写java代码,出现在jsp的servlet中的service方法中.<%!%>: 直接写java代码,出现在jsp生成的servlet的类中. 声明类中的变量, 方法.<%=%>: 输出, 写在该脚本中的代码,最后会出现在service方法 中,并以 out.print(); 包裹.
2.5 JSP中的注释
<%-- --%> : 被注释掉的内容,不会生成到java文件中.<!-- --> : html注释,将html代码发送给浏览器之后,给浏览器看的.
3 JSP指令
3.1 三大指令:
一、page 页面中的一些信息(最复杂)
language: 描述当前页面使用的语言. 目前取值只有java.buffer="8kb" (不常用) : 决定缓存的大小.autoFlush="true"(不常用) : 如果缓存写满了.如果该属性为true,会将缓存中的自动输出到浏览器. 设置为false,将会报错.import="java.io.FileOutputStream" 该属性用来导包. 唯一一个可以出现多次的.extends=""(不用) 绝对 jsp生成的java文件 继承哪个类.默认继承:org.apache.jasper.runtime.HttpJspBase.通过该属性可以改变.也必须是HTTPServlet的子类.pageEncoding="UTF-8" 决定服务器读取jsp时 采用什么编码读contentType="text/html; charset=UTF-8" 响应浏览器时 告诉浏览器用什么码表解码. 以上两个属性,只需要指定一个,另外一个会自动指定.errorPage=""(不常用) 当前jsp中出现了异常. 那么跳转到哪个页面.isErrorPage="false"(不常用) 标识当前页面是否是处理错误的页面.拓展: 错误页面可以使用如下统一配置
<error-page><error-code>500</error-code> <location>/zhiling/Demo2.jsp</location></error-page>
session="true"(不要修改) 页面中是否 需要使用session对象.如果为false,那么session内置对象会消失. 默认为true.
二、include 页面包含指令(静态包含)
三、taglib 引入标签指令
4 九大内置对象.
HttpServletRequest request HttpServletResponse responseHttpSession sessionThrowable exceptionServletContext applicationServletConfig configObject pageJspWriter outPageContext pageContext
4.1>page对象指向了当前servlet的实例.(一般没用)
4.2>JspWriter jsp中都是使用JspWriter再向外输出内容.
response.getWriter 和 JspWriter 有什么区别?
response.getWriter的输出会出现在JspWriter输出的前面.
JspWriter缓存会附加到response.getWriter缓存后.最终输出response.getWriter缓存.
注意:JSP中不要直接使用response.getWriter.
4.3>PageContext 对象
1.page域. 范围只在当前页面当中.(4个域中最小一个域).
//存值pageContext.setAttribute("", "");//取值pageContext.getAttribute("");//删除一个值pageContext.removeAttribute("");
2.还可以操作其他3个域.
如何获得其他3个域代表的int值.PageContext中的常量.
//存值pageContext.setAttribute("name", "tom",PageContext.REQUEST_SCOPE );//取值pageContext.getAttribute("name", PageContext.REQUEST_SCOPE);//删除一个值pageContext.removeAttribute("name", PageContext.REQUEST_SCOPE);//遍历所有键 pageContext.getAttributeNamesInScope(PageContext.REQUEST_SCOPE);
3.还能获得其他8个内置对象.
pageContext.getRequest();pageContext.getResponse();pageContext.getSession();pageContext.getServletContext();pageContext.getServletConfig();pageContext.getOut();pageContext.getException();pageContext.getPage();
5 JSP标签(本身库很大,有很多标签,全都不用了.)
<jsp:useBean id="u" scope="page" class="cn.itcast.bean.User" ></jsp:useBean>
相当于如下java代码
User user = new User();pageContext.setAttribute("u", user);
<jsp:setProperty property="name" name="u" param="name" />
相当于如下java代
((User)pageContext.getAttribute("u")).setName(request.getParameter("name"));
<jsp:getProperty property="name" name="u"/>
相当于如下java代码
out.print(((User)pageContext.getAttribute("u")).getName());
6 JAVA BEAN
就是在写法上符合以下格式即可成为java bean
1.所有作为属性保存的成员变量私有化 ==> java不能脱离基本特性==> 封装性
2.有空参构造 ==> 使用内省可以帮你创建对象.
3.属性由对应get/set方法 ==>
1.满足了封装性,
2.命名规律的话,内省就能分辩出哪些是操作属性的方法,那些不是.
符合上面的格式,对我们开发来说有什么好处?
可以应用JAVA的内省机制.
BeanUtils 工具类
提供一个populate方法,可以把表单提交的参数自动封装到Bean中.
并且可以自动进行类型转换.
转换范围是 8个基本数据类型.
我们也可以注册一个转换器,让BeanUtils可以转换其他类型.(参照BServlet和MyConverter)
7.EL表达式
封装内省的操作. 可以通过EL表达式操作JAVA BEAN.
功能: 替代页面上的代码
7.1使用EL内置对象,获得数据
EL的内置对象如下:
1.requestScope2.sessionScope3.applicationScope4.pageScope//--------------通过以上4个内置对象可以对4大域进行访问//--------------下面的内置对象用处不大,5.param 6.paramValues 这两个对象封装了表单参数7.header8.headerValues 这两个对象封装了HTTP请求头9.initParam 封装了web.xml中 配置10.pageContex 封装了 9大内置对象中的 pageContext11.cookie 封装了cookie信息
7.2 使用EL表达式可以获取JAVABEAN属性 集合项的值.
<%--使用EL访问User对象--%><%User u = new User();u.setName("tom");request.setAttribute("user", u);%>${requestScope.user.name}==><%((User)request.getAttribute("user")).getName(); %><br>${requestScope.user['name']}==><%((User)request.getAttribute("user")).getName(); %><br> <%使用EL访问数组 String[] array = new String[]{"tom","jerry","jack","rose"};request.setAttribute("array", array);%>${requestScope.array[2]} <br><%使用EL访问ListList<String> list = new ArrayList<String>();list.add("jack");list.add("rose");request.setAttribute("list", list);%>${requestScope.list[1]}<br><%使用EL访问MapMap<String,String> map = new HashMap<String,String>();map.put("birthday", "now");map.put("haha.heihei", "hiahia");request.setAttribute("map", map);%>${requestScope.map.birthday}<br>${requestScope.map['birthday']}<br>${requestScope.map['haha.heihei']}<br>
7.3 使用EL可以进行逻辑运算
<%request.setAttribute("num1", 10);request.setAttribute("num2", 20);%>//EL表达式支持如下运算符.${num1 > num2} ==>${num1 gt num2}<br>${num1 < num2} ==>${num1 lt num2}<br>${num1 <= num2}==>${num1 le num2} <br>${num1 >= num2}==>${num1 ge num2} <br>${num1 == num2}==>${num1 eq num2} <br>${num1 != num2}==>${num1 ne num2} <br>${true && true}<br>${true || true}<br>${!true}<br>${(num1 > num2)?"num1厉害":"老2厉害" }
8.EL函数库的学习
8.1 什么是EL函数库,干什么用的?
简化页面中静态方法的调用,使用EL函数代替JAVA代码.
8.2 如何自定义EL函数库?
1>定义工具类,在类中定义静态方法
2>填写配置文件xxx.tld 放到WEB-INF下
加入如下配置:
<!--版本号(没啥用) --><tlib-version>1.0</tlib-version><!--推荐使用的前缀 --><short-name>myFn</short-name><!--给该标签库 起一个"包名" ,在页面中引入时 使用. --><uri>http://www.itcast.cn/myFn</uri><!--注册一个EL函数 --><function><!--声明函数名称 --><name>getTime</name><!--注册静态方法所在的完整类名 --><function-class>cn.itcast.tool.Tool</function-class><!-- 绑定类中的静态方法 --><function-signature>java.lang.String getTime()</function-signature></function></taglib>
3>页面中先引入.
<%@ taglib prefix="myFn" uri="http://www.itcast.cn/myFn" %>再使用${myFn:getTime()}
3.学习系统自带的EL函数.
${fn:contains("hiahia", "hi")}<br> 判断是否包含${fn:endsWith("abha", "ha")}<br> 判断是否以某字符串结尾(有BUG)${fn:escapeXml("<font color='red'>haha</font>")}<br> 自动将html关键字符转义
jspWriter和responseWriter区别
静态包含
指令中pageEncoding和contentType
- day10_ELexpression&EL函数与之前复习
- iOS7与之前版本差异
- iOS7与之前版本差异
- iOS7与之前版本差异
- 复习 Effective STL 第五条 区间成员函数优先于与之对应的单元素成员
- iOS 6版本与之前版本差异
- iOS8与之前版本的【异同】
- QT5与之前版本间问题整理
- HTML5与之前版本的不同
- OkHttp3升级实践与之前2.0对比
- cookie应用显示当前与之前时间
- CSS3与之前版本的区别
- Bluetooth HIDL与之前版本的变化
- EL表达式复习
- main 函数之前与之后
- el函数
- EL函数
- EL表达式/JSTL复习总结
- 初识jsp
- 【C语言】编程习惯小提示(一)
- Python的zip函数
- mysql 索引学习 第一篇
- 手把手教你写Linux设备驱动---input子系统(二)--按键驱动实现(一)(基于友善之臂4412开发板)
- day10_ELexpression&EL函数与之前复习
- Accelerated C++<4-5>
- 因特网的路由选择协议
- 求N的阶乘
- Win10优化大师1.0 Beta 5发布,跟上微软的节奏
- tensorflow21《TensorFlow实战Google深度学习框架》笔记-09-02 TensorBoard命名空间 code
- js作用域链和变量的作用域
- 51nod 1072 威佐夫游戏(威佐夫博弈)
- 软媒时间3.11正式版发布:天气信息获取更迅速