JSP&&Session

JSP指令

  1. JSP
    1.指令
    2.注释
    3.内置对象
  2. MVC开发模式
  3. EL表达式
  4. JSTL标签
  5. 三层架构

JSP

  1. 指令
    作用:用于配置JSP页面,导入资源文件
    格式:
    <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 … %>
    分类:
    1. page:配置JSP页面
    * contentType:等同于response.setContentType()
    设置响应体的mime类型以及字符集
    设置当前jsp页面编码(charSet=utf-8)
    * import:导入包 <%@ page import=“java.util.List” %>
    * errorPage:当前页面发生异常后会自动跳转到指定错误页面
    * isErrorPage:标识当前页面是否是错误页面
    true:是,可以使用内置对象exception
    false:否,不可以使用内置对象exception
    * buffer:缓存区大小
    2. include:页面包含,导入页面资源文件,公共页面有公共特性,避免重复编写
    <%@inlcude file=“top.jsp”%>
    3. taglib:导入资源
    <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
  2. 注释
    1. html注释:
    2. jsp注释:
      <%-- --%>:可以注释所有
  3. 内置对象
    在jsp页面中不需要创建,直接使用的对象
    变量名 真实类型 作用(前四个多个存在域)
    pageContext PageContext 当前页面共享数据,还可以获取其他八个内置对象
    request HttpServletRequest 一次请求访问多个资源(转发)
    session HttpSession 一次会话的多个请求间
    application ServletContext 所有用户间共享数据
    response HttpServletResponse 响应对象
    Page Object 当前页面Servlet对象
    out JspWriter 输出对象,数据输出到页面上
    config ServletConfig Servlet配置对象
    Exception Throwable 异常对象

MVC开发模式

  1. JSP演变历史
    1. 早期只有servlet,只能使用response输出标签数据,繁琐
    2. jsp诞生后,简化Servlet开发,过度使用jsp,在jsp中存在大量java代码与html表,难于维护
    3. java中,web开发借鉴mvc开发模式,使程序设计更加合理
  2. MVC:
    M:Model:模型javaBean
    • 完成具体业务操作:查询数据库,封装对象
      V:View 视图
    • 展示数据
      C:Controllor 控制器 Servlet
    • 获取用户输入
      调用模型
      将数据交给视图进行展示
      优点:
      耦合度低,方便维护,可以利于分工协作
      重用性高
      缺点:
      项目架构复杂,对开发人员要求高

EL表达式(expression language)

使用EL表达式替换或简化jsp页面中java代码编写
语法:
${表达式}
注意:
jsp默认支持el表达式,忽略el表达式:
1. 设置jsppage中:isELIgnored="true"忽略当前jsp页面中所有el表达式
2. ${表达式}:忽略当前这个el表达式
使用:
1. 运算:
* 运算符:
1. 算数运算符:+ - * / (div) %(mod)
2. 比较运算符:> < <= >= == !=
3. 逻辑运算符:&&(and) ||(or) !(not)
4. 空运算符 empty
功能:用于判断字符串,集合,数组对象是否是null或长度是否为0
${empty list}:判断字符串,集合,数组对象是否为null或长度为0
n o t e m p t y s t r : 表 示 判 断 字 符 串 , 集 合 , 数 组 对 象 是 否 不 为 n u l l , 并 且 长 度 &gt; 02. 获 取 值 1. e l 表 达 式 只 能 从 域 对 象 中 获 取 值 语 法 : {not empty str}:表示判断字符串,集合,数组对象是否不为null,并且长度&gt;0 2. 获取值 1. el表达式只能从域对象中获取值 语法: notemptystr:null>02.1.el:{域名称.键名}:从指定域中获取指定键的值
域名称:
1. pageScope -->pageContext
2. requestScope -->request
3. sessionScope -->session
4. applicationScope -->application(ServletContext)
exp:
request域中存储了name=张三
获取:
1. ${requestScope.name}
2. ${键名}:表示一次从最小域中查找是否有该键对应的值,直到找到为止
3. 获取对象
通过的是对象的属性来获取
setter或getter方法,去掉set或get,再将剩余部分首字母变为小写
setName—>Name–>name
${域名称.键名.属性名}
4. list集合:
${域名称.键名[索引]}
5. Map集合:
${域名称.键名.key名称}
6. 隐式对象
el表达式中,有11个隐式对象
pageContext:
获取jsp其他八个内置对象
${pageContext.request.contextPath}

<%@ page import="Model.User" %>
<%@ page import="java.util.*" %><%--
  Created by IntelliJ IDEA.
  User: xiaomi
  Date: 2019/4/28
  Time: 19:17
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    User user=new User();
    user.setName("张三");
    user.setAge(19);
    user.setBirthday(new Date());
    request.setAttribute("u",user);

    List list=new ArrayList();
    list.add("材料");
    list.add("计算机");
    list.add(user);
    request.setAttribute("list",list);

    Map map=new HashMap();
    map.put("name","张三");
    map.put("gender","男");
    map.put("user",user);
    request.setAttribute("map",map);
%>

${u.name}<br>
${u.age}<br>
${u.birthday}<br>
${u.birStr}<br>
<hr>
${list[0]}<br>
${list[1]}<br>
${list[2].name}<br>
<hr>
${map.gender}<br>
${map.user.name}<br>
<hr>
<h3>动态获取虚拟目录</h3>
${pageContext.request.contextPath}
</body>
</html>
  1. 概念:
    Java Server Pages: Java服务器端页面
    一种特殊的页面,其中可以指定定义的html标签,又可以定义java代码
    用于简化书写

  2. 原理:
    JSP本质上是一个Servlet

  3. JSP脚本:JSP定义java代码的方式

    1. <% 代码 %>:定义java代码,在service方法中。service方法中可以定义的均可以在该脚本定义
    2. <% 代码 %>:定义的java代码,在JSP转换后的java类成员位置
    3. <% 代码 %>:定义的java代码,会输出在页面上,输出语句中可以定义什么,该脚本就可以定义什么
  4. JSP内置对象
    在JSP页面中不需要获取与创建,可以直接使用的对象
    JSP中一共9个内置对象
    request
    response
    out
    out:字符输出流对象:可以将数据输出到页面上,与response.getWriter()类似
    response.getWriter()与out.writer()区别:
    在tomcat服务器真正给客户端做出相应之前,首先从response缓冲区读取,再从out缓冲区读取数据
    所以:response.getWriter()数据永远在out.writer()之前

Session

  1. 概念:
    服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中 HttpSession
  2. 获取HttpSession对象:
    HttpSession session=request.getSession();
    使用HttpSession对象:
    Object getAttribute(String name)
    void setAttribute(String name,Object value)
    void removeAttribute(String name)
  3. 原理:
    Session的实现是依赖于Cookie的,第一次会话中,内部自动创建一个SessionID,将其response到cookie中,
    之后的每次请求,都携带该cookie,实现Session的共享
  4. 细节
    1. 当客户端关闭,服务器关闭,两次获取的session是否为同一个?
      默认情况下不是
      如果需要获取同一个session,可以创建cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存
	c.setMaxAge(60*60);
	response.addCookie(c)
  1. 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
    不是同一个,服务器每次创建session的内存地址随机
    但是,重启服务器,保证用户体验,需要进行保证session数据不丢失
    session的钝化:
    在服务器正常关闭前,将session对象序列化到硬盘上(生成在work文件中)
    session的活化:
    在服务器启动后,将session文件转化为内存中的session对象(从work文件中抽取,并将序列化文件转化后删除)
    3.session什么时候被销毁?
    1.服务器关闭
    2.session对象调用invalidate()//自杀
    3.session默认失效时间30min

session特点:

1.session用于存储一次会话的多次请求的数据,存在服务器端
2.session可以存储任意类型,任意大小的数据
3.session数据安全,Cookie相对不安全

与cookie区别:

1.session存储数据在服务器端,cookie在客户端
2.session存储数据大小无限制,cookie有
3.session数据安全,Cookie相对不安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值