Session
-
概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端对象中,HttpSession
-
快速入门:
-
获取HttpSession对象 HttpSession
HTTPSession session = request.getSession
-
使用Session对象存储、获取、移出数据
session.setAttribute("msg","helloSession"); session.getAttribute("msg"); session.romoveAttribute("msg");
- 在一个服务器中的不同Servlet中共用一个session对象
-
-
Session的实现是基于Cookie的
- 创建Session时,会判断服务器是否有cookie如果没有会创建新的session并生成jssessionID并将id写入cookie中发送给客户端,客户端保存,当再次访问时再将id发送给服务器,服务器再次获得session对象时就是同一个对象
-
细节问题:
-
客户端关闭后服务器不关闭两次获取session是否为同一个
-
默认情况:不是同一个
-
如果需要两次获取的session为同一个对象,可以设置cookie的最大存货舌尖,让cookie持久化保存
HttpSession session = request.getSession(); Cookie cookie = new Cookie("JSESSIONID",session.getId()); cookie.setMaxAge(60); response.addCookie(cookie);
-
-
客户端不关闭,服务器关闭后,两次获取session是否为同一个?
- A: 不是同一个,但是为了确保数据不丢失,Tomcat自动完成以下工作
- session的钝化:在服务器正常之前,将session对象序列化到硬盘上(序列化对象过程)
- session的活化:在服务器启动后,将session文件转化为内存中的session对象即可
- A: 不是同一个,但是为了确保数据不丢失,Tomcat自动完成以下工作
-
session什么时候回被销毁?
-
服务器关闭
-
void invalidate()使此会话无效,然后取消绑定绑定到他的任何对象
-
session的默认失效时间:30分钟
CATALINA_BASE:目录下的\conf目录下的web.xml中 <sesion-config> <session-timeout>30</session-timeout> </session-config>
-
-
-
session特点
- session用于存储一次会话中的多次请求的数据,存储在服务器端
- session可以存储任意类型,任意大小。
- session cookei的区别
- session存储在服务器,cookie存储在服务器
- session没有数据大小限制,cookie有
- session数据安全性高cookie相对不安全。
JSP
-
指令:
-
作用:用于配置JSP页面,导入资源文件
-
格式:
<%@ 指令名称 属性名1=属性值 属性名2=属性值…… %> <%@ page contentType="text/html;charset=UTF-8" language="java" %>
-
分类:
-
page:用于配置JSP页面属性值
-
属性值:
contentType:等同于response.setContentType("") 1.设置响应体的mime类型以及字符集 2.设置当前jsp页面的编码,只有高级的IDE环境才可以生效如果使用低级的环境,则需要单独设置器pageEncoding="utf-8"属性来设置当前页面
-
导包
<%@ page import="java.awt.*" %>
-
报错:页面发生错误自动跳转
<%@ page errorPage="er.jsp" %>
-
处理异常
<%@ page isErrorPage="true" %>当为true时可以输出异常信息。
-
-
include:页面包含其他页面的内容
<%@ include file="top.jsp"%>
-
taglib: 导入其他资源
<%@ taglib prefix="c" uri="" tagdir=""%> prefix:标签前缀自定义
-
-
-
注释
-
html注释:只能注释html代码浏览器不显示内容但会将注释内容放到源码中
<!-- -->
-
jsp注释:全注释浏览器自动忽略不加载,不会出现在源码中。
<%-- --%>
-
-
内置对象:
在JSP页面中共有9个内置对象,所谓内置对象指的是不需要在jsp页面中创建,可以直接使用的对象
变量名 真实类型 作用 page pageContext 当前页面共享数据,可以通过pageContex获取其他八个内置对象 request ServletRequest 一次请求访问的多个资源(请求转发) session HttpSession 一次会话的多个请求间共享数据 ServletContext ServletContext 所有用户间共享数据 response HttpServletRespones 响应对象 page Object 当前页面(Servlet)的对象相当于this out JspWriter 输出对象 config ServletConfig Servlet的配置对象 exception Throwable 异常对象 <% List list = new List(); ServletRequest request1 = pageContext.getRequest(); HttpSession session1 = pageContext.getSession(); ServletContext servletContext = pageContext.getServletContext(); ServletResponse response1 = pageContext.getResponse(); Object page12 = pageContext.getPage(); JspWriter out1 = pageContext.getOut(); ServletConfig servletConfig = pageContext.getServletConfig(); Exception exception1 = pageContext.getException(); %>
MVC开发模式
jsp发展史:
- 早期只有Servlet,只能使用response输出标签进行数据展示
- 后有了jsp,简化了Servlet的开发,但在jsp中写大量的java代码,html代码,js代码,造成代码难以维护,难以分工合作。
- 再后来javaweb的开发借鉴MVC开发模式,使程序设计更加合理分工更加明确
MVC
MVC是Model View Controller,是模型(model)-视图(View)-控制器(Controller)的缩写
- M:Model 模型 -->Java页面
- 主要完成具体逻辑操作 比如:查询数据库,将数据封装到对象
- V:View 视图 JSP页面
- 展示数据
- C:Controller 控制器 Servlet
- 获得客户端浏览器发送请求的数据
- 调用model模型将数据封装到对象中,model去执行业务逻辑
EL表达式:
基础知识
-
概念:Expression Language:表达式语言
-
作用:替换和简化JSP页面中java代码的编写
-
语法: ${表达式内容}
-
注意事项:
- jsp默认支持EL表达式,可以通过设置jsp page指令isELIgnored="true"来忽略全局EL表达式
- 可以使用/${表达式}来对表达式进行转义来显示到浏览器中
-
运算符:
-
算数运算符:+、-、*、/、%(mod)
-
比较运算符:> < >= <= !=
-
逻辑运算符:&&、||、!
-
空运算符:empty
-
功能:用于判断字符串集合数组对象是否weinull或者长度是否为0
${empty 键名}//判断对象(可以是字符串 集合 数组),返回的是Boolean值 ${not empty 键名}
-
-
-
获取值
-
EL表达式只能从域对象中获取值
-
语法:
1.${域的名称.键名}:从指定域中获取指定键值如果找不到显示空行 2.${键名}:表示依次从最小的域中查找是否有该键对应的值,知道找到位置,如果找不到显示空行
域名称 对象名 作用范围 pageScope pageContext 当前页面 requestScope request 同意请求的多个页面(转发) sessionScope session 同一个会话的多个请求 applicationScope application 所有用户的请求
-
-
获取对象、List集合、Map集合中的值
对象
-
获取值的语法
${域的名称.键名.属性名} ${键名.属性名} ${键名.变量名}
-
成员变量和属性的区别
Date birthday = new Date();//成员变量 private String getBir(String birthday){ if(birthday !=null){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") return sdf.format(birthday) }else{ return = null; } } /** 其中birthday叫做成员变量 getBir方法返回的值叫做属性 获得属性的方法为 ${类名.bir}属性名为除去get后将首字母小写 */
-
List集合
${域名称.键名[索引值].属性值} ${键名[索引值].属性值}//表示依次从最小的域中查找是否有该键对应的值
-
Map集合
${域名称.键名.map中的key} ${域名称.键名[key]}//也可以不带域名称此处不再赘述
-
隐式对象
EL表达式中有11个隐式对象
e.g :
JSP中动态获取虚拟目录 ${pageContext.request.contextPath}//此行代码可以用在form表单中的action中不会因为虚拟路径的改变而导致访问服务器失败
JSTL
基础知识
- 概念: JavaServer page Tag Library :JSP标准标签库
- 作用: 用于简化和替换jsp页面上的Java代码
- 使用步骤:
- 导包 导入jstl相关的jar包
- 引入标签库 taglib指令 <%@ taglib %>
- 使用标签
- 常用的JSTL标签
- if:相当于Java代码中的if语句
- choose:相当于Java代码中的switch语句
- foreach:相当于Java代码中的for语句
JSTL的三种标签
核心标签
- 引用标签的语法
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:out> | 用于在JSP中显示数据,就像<%= … > |
---|---|
<c:set> | 用于保存数据 |
<c:remove> | 用于删除数据 |
<c:catch> | 用来处理产生错误的异常状况,并且将错误信息储存起来 |
<c:if> | 与我们在一般程序中用的if一样 |
<c:choose> | 本身只当做<c:when>和<c:otherwise>的父标签 |
<c:when> | <c:choose>的子标签,用来判断条件是否成立 |
<c:otherwise> | <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行 |
<c:import> | 检索一个绝对或相对 URL,然后将其内容暴露给页面 |
<c:forEach> | 基础迭代标签,接受多种集合类型 |
<c:forToKens> | 根据指定的分隔符来分隔内容并迭代输出 |
<c:param> | 用来给包含或重定向的页面传递参数 |
<c:redirect> | 重定向至一个新的URL. |
<c:url> | 使用可选的查询参数来创造一个URL |
格式化标签
用来格式化并输出文本,日期时间:引用语法
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
标签 | 描述 |
---|---|
fmt:formatNumber | 使用指定的格式或精度格式化数字 |
fmt:parseNumber | 解析一个代表这数字,货币或者百分比的字符串 |
<fmt:formatDate > | 使用指定的风格或模式格式化日期和时间 |
fmt:parseDate | 解析一个带别致日期或者时间的字符串 |
fmt:bundle | 绑定资源 |
fmt:setLocale | 指定地区 |
fmt:setBundle | 绑定资源 |
fmt:timeZone | 指定时区 |
fmt:message | 显示资源配置文件信息 |
fmt:requestEncoding | 设置request的字符编码 |
SQL标签
提供了与关系数据库(Oracle,MySQL,SQLserver)进行交互的标签)
-
引用语法:
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
标签 描述 sql:setDataSource 指定数据源 sql:query 运行SQL查询语句 sql:update 运行SQL更新语句 sql:param 将SQL语句中的参数设为指定值 sql:dateParam 将SQL语句中的日期参数设为指定的java.util.Date对象值 sql:transaction 共享数据库连接中提供嵌套的数据库行为元素将所有语句以一个书屋的形式来运行.
XML标签
提供了创建和操作XML文档的标签
-
引用语法
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
标签 | 描述 |
---|---|
<x:out> | 与<%=…>类似不过只用于XPath表达式 |
<x:parse> | 解析XML数据 |
<x:set> | 设置XPath表达式 |
<x:if> | 判断XPath表达式,若为真则执行本体中的内容否则跳过本体 |
<x:forEach> | 迭代XML文档中的节点 |
<x:choose> | <X:when>和<x:otherwise>的父标签 |
<x:when> | <x:chosse>的子标签,用来进行条件判断 |
<x:otherwise> | <x:choose>的子标签,当<x:when>判断为false时被执行 |
<x:transform> | 将XSL转换应用在XML文档中 |
<x:param> | 与<x:transform>共同使用,用于设置XSL样式表 |