2021.1.4 Session,JSP EL

Session
1.概念
他属于服务器端的一种会话机制,在一次会话多次请求数据的共享,将数据保存在服务器对象中 HttpSession

快速入门
常用的api方法有三个:
setAttribute(String name,Object value) --->赋值
getAttribute(String name) --->获取值
removeAttribute(String name) --->删除会话中指的值
原理:
Session对象的实现需要依赖Cookie,没有cookie的Session对象不是Session
注意:并没有消失,而是在后台的管理端
两次打开客户端,服务器端不关闭,关闭之后并没有消失,而是在后台管理端,两次并不是后取得同一个Session对象一般来说每次打开一个新的服务器,那么session对象id就需要手动指定
如果需要每次打开服务器的时候都是id相同的session对象,那么就需要手动指定cookie中的JSESSIONID,通过响应头的形式发送给客户端,设置cooklie存活时间
代码演示
Cookie cookie = new Cookie("JSESSIONID", session.getId());//手动指定对象
cookie.setMaxAge(60);//cookie的存活时间
response.addCookie(cookie);//通过响应头发送给客户端本地

客户端不关闭:服务器关闭的时候两次获取的Session对象肯定不是一样的,Tomcat服务器内部做了优化会自动完成两项工作
  第一项工作:Session的钝化::就是实现序列化--->把Session对象中的数据以文件形式保存在客户端本地
  第二项工作:Session的活化::通过反序列化--->把之前存的值,提取到内存当中,使得我们可以取得这个值
Session销毁时机
  1.服务器关闭的时候Session就会关闭
  2.Session对象默认存活30分钟,通过标签Session-config可以修改
  3.手动失效,通过session.invalidate()方法销毁,再次调用只能用request.getSession()获得新的对象
Session的特点:
  1.Session数据是保存在度武器端的,Cookie的数据是保存在客户端的,
  2.Session数据存储没有大小限制,Cookie有大小限制,单个Cookie的默认大小为4kb同一个域名下最多20个Cookie
  3.Session数据在服务器端,看不见相对安全,Cookie在客户端,看得见不是很安全

JSP
1.概念
支持java语言编写的运行在服务器端上的页面
JSP = HTML + JAVA
就是精简化的Servlet代码
JSP原理就是Servlet

JSP原理图

由此客店HTML静态页面更快,JSP动态页面更慢

JSP脚本:JSP定义使用javba代码的规范
第一种方式:<% java代码 %> --->被Tomcat解析之后生成代码文件在service方法里面就能看见这个代码
第二种方式:<%! java代码 %> --->被Tomcat解析之后,生成的代码文件位置在Servlet的成员变量位置,可以定义成员方法和成员属性.
第三种方式:<%= java代码 %> ---->被Tomcat解析之后,生成的代码信息,会出现在页面上面,相当于通过打印流输出或者写入到页面当中

代码演示

我是一个大标题

<% /必须卸载这里面才能被解析为java代码,并且输出再控制台不输出在页面/
/代码显示是显示在service()方法里面的,其实就相当于在servicwe里面写的哦/
String name="张三";
System.out.println(name);
%>

<%--显示在成员变量和成员方法--%>
<%!
String str="小孙";
public void insertDate(){
System.out.println("helloword");
}
%>


<%--通过打印流写入到页面当中--%>
<%--就是输出上面的str--%>
<%=str

%>

$END$

JSP九大内置对象
不同创建就能直接使用的对象称为内置对象
九大内置对象
内置对象 真实对象 作用
1.request HttpSeervletRequest 获取请求资源,request域对象(一次请求多个资源共享)
2.response HttpServletResponse 响应,响应的数据封装到响应当中
3.session HttpSession 实现多个用户之间数据共享
4.out jspWrite 输出对象,把信息输出到页面当中
5.config ServletConfig 配置Servlet内置信息
6.exception Throwable 异常对象(当前页面需要申明 isErrorpage = true)
7.pageContext PageContext 全局对象代表整个应用
8.application ServletContext 指代当前Servlet对象或者页面,指代当前页面
9.page

JSP指令
用来配置当前jsp页面可以插入一些外部资源
语法格式:
<%@ 指令名称 属性值 = 属性值 属性名 = 属性值 %> 多个之间用空格隔开
分类:
page:----->用来配置当前的页面
contentType---->response.setContentType="text/html:charset=UTF-8",把字符编码集设置为UTF-8,响应体为:text/html
设置当前页面的编码:也可以用pageEncoding=UTF-8
import---->导包会用到的动作,导入外部的一些类哦库资源,比如Arrays之类的包
errorPage--->作用是当前页面发生错误,跳转到哪一个页面,客户端异常会跳出404而不是错误页面
isErrorPage--->后面更true表示打开errorPage这个指令的作用,如果不打开,即使页面错误也不会跳转
include指令--->是包含的意思,包含其他的页面信息
语法格式:<%@ include file = "资源路径" %> 或者 <jsp:include page="footer.jsp"></jsp:include>
taglib:引入外部标签库资源
语法格式: <%@ taglib prefix = "前缀" uri="资源路径" %>,前缀可以自定义一般是用c
注释:注释之后客户端不会显示,服务器端注释不会发送
代码演示

MVC开发模式
1,.概念:

  • M:model 模型---->javaBean
    • 用于封装数据和处理业务逻辑(三层架构) 逻辑这一块嫁给了Service处理
  • V:view 视图----->JSP
    • 展示后端里面的数据
  • C:Controller 控制器---->Servlet表示---->相当于一个核心大脑,,连接视图和模型关联起来
    • 获取表单输入的数据,
    • 关联模型和视图
    • 给客户端响应一些业务结果.先把数据传输给视图,视图把数据解析完成之后传输给浏览器显示

EL表达式
1.概念
EL表达式只能在jsp页面不能再HTML页面
2.作用
简化jsp中的java代码
3.语法
${ 表达式 }
注意事项
对于就是破页面默认支持表达式,如果想忽略el表达式
第一种:isEllgoned = "true" 禁止当前页面使用el表达式
第二种:${ 表达式 } 前面加一个 就表示忽略

具体使用
运算:

  • 运算符

    • 算数运算符: + - * / %
    • 比较运算符 : > < >= <= != ==
    • 逻辑运算符: && || !
    • 空运算符 empty
      • 判断域中的对象是否为空,对象为null或者对象为容器,容器长度为0
      • 语法格式:${ empty 目标对象 } 判断字符串,数组,集合是否为null或者长度为0,为空返回true
      • 不为空:${ not empyt 目标对象 } 判断字符串数组集合不为null并且长度也不为0,不为空返回true
  • 从域中取值:

    1. request(第三,一个请求可以跨越多个资源)
    2. ServletContext(范围最大,全局只有一个)-
    3. session(第二,)
    4. pageContext(第四只能在当前页面中使用)
    • 在饿了表达式汇中对应名字: applicationScope > SessionScope > requestScope > pageScope
  • el表达式只能从域中取值

    • 语法格式: ${ 域名称.key名称 }
  • el取值的时候:有时候可以省略域名称

    • 语法格式: ${ key名称 } ------ 从最小的域中到最大的域中依次查询知道查到位置
    • 如果没有查到也不显示,也不会报错.
    • 获取域中存取对象的属性值,属性值映射get方法跟后面的名字 例如:getAge-----对象.age
    • 格式: ${ 对象.参数名称 }
    • 优化写法
      • list集合: ${ key名称[ 索引 ] }
      • map集合: ${ 域key值 [ "map的key值" ] } 或者 ${ 域key值.map的key值 }
    • 隐式对象的获取:可以通过pageContext获取到其他八大内置 对象

代码演示

原文地址:https://www.cnblogs.com/tushao/p/14279924.html