1.会话技术
什么是会话技术:
相当于打电话,在计算机领域中,客户端与服务端之间的一次通话称之会话,也就是说打开了浏览器访问了一个地址,发送请求成功后就相当于开启了一个新的会话。
请求和请求之间是之前没有关系,当我们需要记录用户的登录状态,需要另一个对象Session
会话的生命周期:
会话开启:打开了某个浏览器
会话结束:关闭浏览器、超时
2.Session简介
Session是服务器提供的一个会话对象,是第二大作用域对象。创建之后这个Session是存储到服务器中的。但Session的使用需要和浏览器建立关联,这个关联与Cookie有关,其中每一个Session对象都会对应一个sessionId,这个sessionId就被存储在Cookie中。
2.1 Session的生命周期
// 生命周期: 第一次访问服务器开始 tomcat服务器就会维护一个session对象
// 什么时候结束: 第一 主动注销,调用invalidate()方法一般用在注销账户。第二 超出时间限制
首先session是一个HttpSession类型的变量
session是服务器(tomact)给我们维护的,不能new 】
要通过req.getSession();
session生命周期
第一次访问服务器开始,tomacat服务器就会维护一个session对象,(开始)
来保存登陆状态,每一个用户都有一个(作用)
主动注销或超时(结束)
session存储数据的方式
session是一个域对象
session.setAttribute("LOGINUSER",d_user);
//在 session这个域对象中存放了一个d_user对象叫LOGINUSER,
//如果取出LOGINUSER有值,就代表d_user登录
Object obj=session.getAtribute("LOGINUSER")
转发
语法
request.getRequestDispatcher("WEB-INF/other.jsp").forward(request,response)
ServletContext()
整个项目过程中只有一个ServletContext,是整个项目的实例,
req.getServletContext().
2、EL表达式
2.1J SP上写Java代码
格式:<% java代码 %>
<%
List list =(List)request.getAttribute("userlist");
%>
拿到list 可以做有一张表显示出来,需要用标签table
<table>
// <tr>表示单元行
<tr> <td> ID</td> <td> 账号</td> <td> 密码</td> </tr> // <td>表示单元格
<%
for(User u:list ){%>
<tr><td> ID</td> <td> </td> <td> 密码</td> </tr> //单元格
<tr><td> <%=u.getId()%></td> <td> <%=u.getUserName()%></td> <td> <%=u.getUserpass()%></td> </tr> }
<%
%>
</table>
3、JSP
- 定义:
JSP是一种动态网页开发技术,JSP文件就是在传统的HTML文件中插入JAVA代码和JSP标签,后缀为.jsp
指令标签:用来告诉Web服务器如何处理JSP界面的请求和指令,服务器会根据JSP指令来编译JSP,生成Java文件。
1.page标签:
JSP page指令用来定义当前界面的相关属性,page指令通常放在JSP页面的顶部
格式:<% @page %>
- isErrorpage标签:指定当前页面为错误页面(true、false默认值)
格式: <%@page is isErrorpage="true"%>
- import标签:导入包、类类似Java中import关键字
格式: <%@page is import="java.util.Date" %>
- isTreadSafe标签:是否允许多线程(true默认值 false)
格式: <%@page isTreadSafe="false" %>
- isEllgnored标签:绑定页面是否忽略JSP中的EL(true默认值 false)
格式: <%@page isEllgnored="false" %>
2.include标签
include指令用于在JSP页面引入其他内容,可以是JSP文件、html文件和文本文件,相当于把文件的内容复制到JSP页面,引入的文件和JSP页面同时编译运行。
格式:<%@include file="URL" %>
3.动作标签:
利用JSP动作标签可以动态的插入文件、重写javaBean组件、把用户重定向到另一个页面、为Java插件生成HTML代码等。
forward标签:跳转作用 用来转发
<jsp:forward page="index.html"></jsp:forward>
include标签:动作用来引入文件,可以是HTML、jsp页面和文本文档,通过include动作我们可以多次使用同一个页面,增加了代码可重用性。例如在页面中使用include动作引入头部和底部页面。
<jsp: include page="index.html"></jsp:forward>
注: 指令标签include和动作标签include的区别.
指令标签是把文件内容复制到这个 和jsp文件一起编译
动作标签是先自己编译 将指令编译的结果放在这里(下面{}中soeasy的结果HelloWorld导入该位置)。
九大内置对象:
request response session application page pagecontext config exception out
request方法:
String getParamete(String name) 获取请求参数name的值
String getParameteName(String name) 获取所有参数name的值
String getParameteValue(String name) 获取请求参数name的所有值
response方法:
JSP response 是 javax.servlet.http.HttpServletResponse 的实例对象。response 对象和 request 对象相对应,主要用于响应客户端请求,将处理信息返回到客户端。
session
JSP session 是 javax.servlet.http.HttpSession 的实例对象,主要用来访问用户数据,记录客户的连接信息。
HTTP 协议是一种无状态的协议(即不保存连接状态的协议)。每次用户向服务器发出请求,且服务器接收请求并返回响应后,该连接就被关闭了,服务器端与客户端的连接被断开。此时,服务器端不保留连接的有关信息,要想记住客户的连接信息,就用到了 session 对象。
application
JSP application 是 javax.servlet.ServletContext 的实例对象。在服务器部署应用和项目时,Web 容器仅创建一次 ServletContext 实例,也就是说 application 设置的任何属性和值可以用于整个应用(所有 JSP 页面)。可以将 application 对象看作 Web 应用的全局变量。一般用于保存应用程序的公用数据。
application 对象在 Web 应用运行时一直存在于服务器中,非常占用资源,因此在实际开发中不推荐使用,否则容易造成内存不足等情况。
EL表达式
为了简化 JSP 页面,JSP 2.0 新增了 EL(Expression Language)表达式语言。EL 提供了更为简洁、方便的形式来访问变量和参数,不仅可以简化 JSP 页面代码,还会使开发者的逻辑变得更加清晰 。
四大作用域:
注意区分四大作用域对象: application(ServletContext)、 session 、request、pageContext
作用域对象:可以往里面放值、取值
page:页面级
request:请求级 (页面之间跳转)
session:会话级
appliction:应用级
访问属性(从域对象取值:)
- 1.$(EL表达式)
- 2.$(username)
- 3.$(param.name)相当于<%=request.getParameter('name')%>
<h1> ${soeasy}--------${LOGINUSER.username}</h1>//代表我们从LOGINUASER
EL表达式中 如果不指定作用域 就从小的作用于开始查找,直到找到为止(找不到就空着不会显示null值)
EL运算符
EL 的+运算符与 Java 的+运算符不一样,它无法实现两个字符串的连接运算。如果该运算符连接的两个值不能转换为数值型的字符串,则会拋出异常;反之,EL 会自动将这两个字符转换为数值型数据,再进行运算。
EL其他运算符
. 和 [ ] 是 EL 中最常用的运算符,用来访问 JavaBean 中的属性和隐式对象的数据。一般情况下,.用来访问 JavaBean 属性或 Map 类型的值,[ ]用来访问数组或者列表的元素。
//访问user下的两个属性
JSTL
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
在JSP中使用 标签taglib指令声明并引入标签库( tag 标签- lib库)
格式:<%@taglib uri=" tagliburl",prefix="tagPre"%>
核心标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:out> 用于在JSP中显示数据,就像<%= ... >
<c:set> 用于保存数据
28行: 用c:out输出了 你好
29行:用c:set向session输入了一个你好111 名字叫text
30行:用EL表达式输出text
<c:if test>