Session技术,JSP引擎,JSP指令:

Session技术(会话):
基于Cookie实现的技术,是Java中的一个键值对的容器,就像我们常用的Map集合
技术原理:

  1. 浏览器访问服务器时,服务器可以选择创建Session对象.
  2. session对象在创建时,会生成一个id,我们称其为sessionid,sessionid是session的密钥, 是唯一的!
  3. session创建完毕后,会自动将sessionid以cookie的形式存储到用户的浏览器中.
  4. 当浏览器再次访问服务器时,会自动携带sessionid发送给服务器.
  5. 服务器得到session后,会去匹配找到对应的session对象,供用户使用

如何获取session对象:
在Java中,session是一个Java对象,对象的类型为HttpSession
获取Session对象的格式:

  1. 无参方法:
    HttpSession session = request.getSession();
    内部调用了一参方法, 且传入true

  2. 一参方法:
    HttpSession session = request.getSession(boolean isNew);
    用于获取session参数:
    true: 根据当前浏览器传入的sessionid,寻找session对象并返回, 如果不存在, 则创建新的session并返回
    false: 根据当前浏览器传入的sessionid,寻找session对象并返回, 如果不存在,则返回null

session的常用方法:

  1. 存储数据
    session.setAttribute(String key , Object value);
    
  2. 获取数据
    session.getAttribute(String key);
    
  3. 删除数据
    session.removeAttribute(String key);
    
  4. 销毁session(应用场景: 基本是退出登录)
    session.invalidate();
    

session的存活时长:
session的默认时长为: 30分钟
指的是: 用户的上一次访问大于30分钟时,session自动删除

设置Session时长:

  1. 修改单个session的时长:
    session.setMaxInactiveInterval(int 秒);
    
  2. 修改tomcat下,所有session的默认时长:
    独立环境: 寻找到tomcat/conf/web.xml文件
    开发环境: 寻找Servers项目中 web.xml

修改web.xml中 session-config节点

<session-config>
    <session-timeout>数值分钟</session-timeout>
</session-config>

session的优缺点:

优点:

  1. 数据存储在服务器中,安全
  2. session存储时的值类型为: Object,可以存储任意类型数据
  3. 可存储的数据大小,理论上是无上限的

缺点:
数据在服务器的内存中存储,内存通常是有限的, 会对服务器造成大量的压力, 很容易耗尽服务器资源

Cookie技术和Session技术不是互斥的:
Cookie和Session是结合使用的:

  1. 对于安全不敏感的数据,建议使用Cookie存储
  2. 对于安全敏感的数据,建议使用session存储
  3. 对于安全敏感,且较大的数据,存储在数据库

JSP引擎:
引擎原理:
JSP引擎用于将JSP文件,转换为Servlet

  1. 在服务器启动时, JSP引擎读取.jsp文件.
  2. 将文件转换为Servlet的代码,并给servlet添加映射地址为jsp的文件名称.
  3. 当用户浏览器访问jsp文件名称时, 其实请求的不是jsp文件, 而是生成的servlet
  4. servlet负责给浏览器进行响应

JSP语法结构:
JSP文件保存的路径: webContent目录下
JSP文件 可以包含HTML代码, Java代码,以及JSP特有的标记.

Java代码 声明区:
指的是Java的成员代码位置, 在JSP声明区中编写的Java代码,会生成到servlet的成员位置.
语法:

<%!
    这里用于编写Java代码,且会生成到声明区
%>

Java代码 执行区:
指的是Servlet的service方法中. 用户每次请求都会执行
语法:

<%!
    Java代码
%>

表达式:
用于快速的将Java代码中的变量输出到网页中.
语法:

<%=变量名%>  

转换的Java:

out.print(变量名);

JSP中如何编写注释:

因为JSP文件包含了三种语法结构(Java/HTML/jsp)
所以,三种语法结构的注释,都可以起到注释的效果:
html注释:

<!--html-->  

JSP中,HTML的注释会被JSP引擎认为是HTML代码,会转换为

out.write("<!---->");  

Java注释:

/*Java注释*/

JSP中,Java的注释会被JSP引擎认为是Java代码,会原封不动的放到_jsp.java文件中

JSP注释:

<%--JSP注释--%>

在JSP引擎将jsp文件 转换为.java文件时,会忽略JSP注释的部分

JSP三大指令:
指令格式:

<$@ 指令名称 属性名=值 属性名2=值 ... 属性n=值$>

page指令:

用于设置页面
完整格式:

<%@ page
    language="java"
    extends="继承的类"
    buffer="数值|none"  -- 缓冲大小,none表示不缓冲,默认是8kb
    session="true|false"  --true:自动创建session
    autoFlush="true|false"  -- 缓冲器自动清除,默认是true
    isThreadSafe="true|false"  --<%%>中的代码是否是同步的,true表示同步,默认是false  
    contentType="text/html;charset=utf-8"  -- 内容类型以及编码格式    

    errorPage="网页地址"  -- 当JSP代码出错误,页面由指定地址进行显示*  

    isErrorPage="true|false"  -- true:当前页面是处理错误的页面,只有为true时,才可以查看异常信息.*  

    import="导包列表"  -- 属性值是一个或多个导入的包,包与包之间使用逗号隔开即可

%>

指定项目全局错误页面:

编写项目的web.xml
在根节点中,加入子节点:

<error-page>
    <error-code>404</error-code>
    <location>处理404的页面地址</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>处理500的页面地址</location>
</error-page>