Session、MVC、JSP和EL表达式

Session

概念

它属于服务器端的一种会话机制,在一次会话的多次请求中实现数据的共享,将数据保存在服务器端的对象中。

HttpSession

  • 快速入门:

    • 常用的api方法:

    • 获取session:request.getSession()

    • 三个方法:

setAttribute(String name,Object value) 存储值
getAttribute(String name): ------>Object value 获取指定的值
removeAttribute(String name): 删除会话中指定的值
  • 原理:Session对象的实现需要依赖于Cookie

  • 注意:

    • 两次打开客户端,服务器端不关闭,两次是否获取的是同一个session?

      • 默认情况下:不是

      • 需要手动指定cookie中的JSESSIONID,通过响应头的形式发送给客户端,设置cookie的存活时间

      • 步骤:

         Cookie cookie = new Cookie("JSESSIONID", session.getId());
         cookie.setMaxAge(60);
         response.addCookie(cookie);
    • 客户端不关闭,服务器端关闭,两次获取的session对象是不是同一个对象?

      肯定不是,tomcat服务器内部做了优化,自动完成两项工作

      • session的钝化:序列化

      • session的活化:反序列化

    • session对象的销毁时机?

      • 服务器关闭

      • session对象的存活时间 默认时间为30分钟

        修改session默认存活时间

        <session-config></session-config>

      • 手动失效 invalidate() 销毁session对象

    • session特点:

      • session数据是保存在服务器端,cookie是保存在客户端中

      • session数据存储没有大小限制,cookie有,默认大小为4kb,同一个 域名下总cookie数量限制在20个以内

      • session数据是较为安全的,cookie数据相对不安全。

JSP

概念

Java Server Pages: 支持Java语言编写的运行在服务端上的页面。

JSP =HTML+JAVA

简化Servlet代码

原理

  • JSP本质上就是一个Servlet

JSP脚本:

  • 概念:JSP定义使用 Java代码的方式、规范

  • 第一种方式: <% java代码 %> 。被tomcat解析之后生成的代码是存放在哪个位置 service()方法中

  • 第二种方式: <%! java代码 %>。被tomcat解析后生成的代码文件,位置在Servlet类的成员位置。可以定义成员变量也可以定义成员方法。

  • 第三种方式: <%= java代码 %> 。 被tomcat解析后生成 的代码信息,会出现在页面中 通过打印流写入到页面中

JSP九大内置对象

  • 在jsp页面中不用创建可以直接使用的对象,称之为内置对象

  • 九大内置对象:

内置对象 真实对象类型 作用
request HttpServletRequest 获取请求资源,request域对象(一次请求多个资源共享)
response HttpServletResponse 响应,响应的数据封装到响应对象
session HttpSession 实现多个用户之间数据共享
out JspWriter 输出对象,把信息输出到页面中
config ServletConfig 配置Serlet信息
exception Throwable 异常对象 (当前页面需要声明 isErrorPage = true)
pageContext PageContext 当前页面实现数据共享
application ServletContext 全局域对象 代表整个web应用
page Object(当前Servlet对象--->当前页面) 当前页面
  • JSP指令

  • 作用:配置当前jsp页面,可以导入一些外部资源

  • 语法格式:

    • <%@ 指令名称 属性名= 属性值 属性名2 = 属性值2 ....%>

  • 分类:

    • page -----> 配置当前的页面

      • contentType:等同于 response.setContentType("text/html;charset=utf-8")

        设置响应体的mime类型以及编码字符集

      • 设置当前页面的编码 可以使用pageEncoding = UTF-8

      • import : 导包 导入外部的一些类库资源

      • errorPage : 指定当前页面发生异常跳转的目标页面,会自动跳转过去

      • isErrorPage:确定是否使用exception内置对象 true-->使用 false-->不用,同时标识本页面为错误页面

    • include: ----> 包含其他页面信息

      • 语法格式: <%@ include file = "资源路径" %>

      • 结合使用 <jsp:include file = "资源路径">

    • taglib: 引入外部的标签库资源

      • 语法格式: <%@ taglib prefix = "前缀" uri = "资源路径" %> 前缀可以自定义,但是一般使用默认的

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  • 注释:

    • html注释

      • 格式: <!-- html注释内容 -->

    • jsp注释: 一般使用jsp注释

      • 格式: <%-- java代码、html代码 --%> 客户端是不显示的,服务器端对于jsp注释是不发送的。

MVC:开发模式

  • 概念:

    • M:Model 模型-----> JavaBean

      • 用于封装数据、处理业务逻辑(三层架构)--->Service

    • V: View 视图-----> JSP

      • 展示数据

    • C: Controller 控制器------>Servlet 中枢大脑

      • 获取表单输入的数据

      • 关联模型和视图

      • 给客户端响应一些业务结果(需要首先把数据传输给视图)

EL表达式

  • 概念:Expression Language 表达式语言 只能在JSP页面上使用

  • 作用:简化jsp页面中的java代码

  • 语法: ${表达式}

  • 注意事项:

    • 对于jsp页面默认是支持el表达式。如果想要忽略el表达式

      • 第一种 使用 isELIgnored = “true” 禁止当前页面使用EL表达式

      • 第二种:

         ${表达式} 忽略掉当前的EL表达式   如  ${3 > 4 ? true : false}
  • 具体的使用:

    • 运算:

      • 运算符:

        • 算术运算符 + - * / %

        • 比较运算符 > < >= <= != ==

        • 逻辑运算符 && (and) 与 || (or ) 或 !(not) 非

        • 空运算符 empty

          • 功能:判断域中存储的对象是否为空 对象为null或者给对象为容器,容器的长度为0

          • 语法格式: ${empty 目标对象}:判断 字符串、数组、集合是否为null或者长度为0------>或

          • 不为空 ${not empty 目标对象}:判断字符串、数组、集合不为null并且长度也不为0---->与

          • ${empty 目标对象} 如果为空返回true 如果不为空返回false

          • ${not empty 目标对象} 如果为空返回false,如果不为空返回true

    • 从域中取值 request、ServletContext session pageContext

      • 大小范围 : ServletContext > session > request > pageContext

      • 在EL表达式中有对应的名字 applicationScope > sessionScope > requestScope > pageScope

    • el表达式只能从域中取值

      • 语法格式: ${域名称.key名称}

    • EL取值时可以省略域名称

      • 语法格式: ${key名称} 取值顺序:从最小的域中到最大的域中查找,直到查到为止。

        如果没有查到,不显示,也不报错。

      • 获取域中存储的对象中属性值:

        语法格式:${对象名称.属性名称}

        注意事项:映射JavaBean中的方法后面的名字 如getAge()----> Age---->age

        获取集合中对象的属性值

        list集合: ${key名称.get(索引).属性名}

        map集合: ${key名称.get(key名称).属性名}

        • 优化做法:

          • list集合: ${域名城.key名称[索引]}

          • map集合: ${域名城.key名称["key名称"]}

            ${域名城.key名称.key名称}

      • 隐式对象获取方式: 可以通过pageContext获取到其他八大内置对象

      • EL表达式中有11个隐式对象

原文地址:https://www.cnblogs.com/lk625/p/14278969.html