Cookie、Session、jsp、EL、JSTL

时间:2022-03-28 22:47:17
会话技术 Cookie Session
从访问一个站点,到关闭不继续访问 称为一次会话过程。会话技术就是记录本次会话中客户端的状态与数据的。
会话技术分为cookie、session。
cookie:将数据存储在客户端本地,减少服务器端存储的压力,安全性不好,客户端可以清除cookie
session:将数据存储到服务器端,安全性相对好,增加服务器的压力。
Cookie
response设置cookie
1.创建cookie
Cookie cookie = new Cookie(String cookieName,String cookieValue);
如:Cookie cookie = new Cookie("username","zhagnsan");
那么该cookie会以响应头的方式发送给客户端
2.设置cookie持久化时间
cookie.setMaxAge(10*60) //单位秒 10分钟
如果不设置持久化时间,那么关闭浏览器cookie就会销毁
3.设置cookie的携带路径
cookie.setPath(String path);
如果不设置携带路径,那么改cookie信息会再访问产生该cookie的web资源所在的路径都携带cookie信息
cookie.setPath("/abc"); 在abc的任何资源都携带cookie
cookie.setPath("/abc/ddd"); 只有在访问ddd时才携带cookie
4.像客户端发送cookie:
response.addCookie(Cookie cookie);
5.删除cookie 设置持久化时间为0即可 cookie.setMaxAge(0);
request获得cookie
1.通过request获得所有的cookie
Cookie[] cookies = request.getCookies();
2.遍历cookie数组,通过名称获得我们想要的cookie
for(Cookie cookie : cookies){
if(cookie.getName().equals(cookieName)){
String cookieValue = cookie.getValue();
}
}
Session
Session需要借助Cookie存储客户的唯一性标识JSESSIONID
1.获得Session对象
HttpSession session = request.getSession();
获得专属于当前会话的session对象,如果没有则创建一个新的Session返回。
2.向session中存储数据
session.setAttribute(String name,Object obj);//设置session
session.getAttribute(String name); //获取
session.removeAttribute(String name); //删除
3.设置session失效
session.invalidate();
session的生命周期
创建:第一次 request.getSession();
销毁:服务器关闭、session 失效、过期(默认30分钟)、 手动session.invalidate();
作用范围:默认一会话中。
JSP(了解即可 大清亡了 早过时了 都前后端分离了)
全程Java Serer Pages 动态生成html、xml的Web网页。
Jsp文件后缀名为*.jsp。
Jsp可以运行在linux和windows上。
JSP类似于php、asp、asp.net等语言详细,运行在服务器端的语言。
注释:
<%--这里是jsp注释 页面中不会显示 --%>
<!--这里是html注释,查看源代码可以显示 -->
jsp脚本:
<%java 代码%> 内部的java代码翻译到service方法的内部
<%=java变量或表达式%> 会翻译成service方法内部out.print()进行输出
<%!java代码%> 翻译成servlet的成员内部而不是在service方法中
jsp运行原理-jsp本质就是servlet
jsp在第一次被访问时会被容易翻译成servlet,执行过程 hello.jsp->hello.java->编译 运行
jsp三大指令
1.page指令
格式 <% page 属性1="属性值1" 属性2="属性值2" %>
language:jsp脚本中可以嵌入的语言种类
pageEncoding:当前jsp文件的本身编码
contentType:文件类型 编码格式
session:是否jsp在翻译时自动创建session
import:导入java的包
errorPage:当前页面出错后跳转到哪个页面
isErrorPage:当前页面是一个处理错误的页面
2.include指令
可以将一个jsp页面包含到另一个jsp页面中
格式 <%@ include file="目标文件地址"%>
3.taglib指令
在jsp页面中引入标签库(jstl标签库、struts2标签库)
格式 <%@ taglib uri="标签库地址" prefix="前缀" %>
jsp内置对象
jsp被翻译成servlet之后,service方法中有9个对象定义并初始化完毕,我们在jsp脚本中可以直接使用。
out 用于页面输出
request 得到用户请求信息
response 服务器向客户端的回应信息
config 服务器配置,可以获得初始化参数
session 用来保存用户的信息
application 所有用户的共享信息
page 当前页面转换后的servlet类的实例
pageContext JSP的页面容器
exception jsp所发生的异常,在错误页中才起作用
四大作用域
page域 当前jsp页面范围
request域 一次请求
session域 一次会话
application 整个web应用
jsp标签
页面包含:<jsp:include page="要被包含的页面" />
请求转发:<jsp:forward page="要转发的资源" />
EL
EL(Express Language) 表达式可以嵌入在jsp页面内部 ,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中的脚本编写。
EL从域中取出数据
jsp脚本:<%=request.getAttribute(name)%>
EL表达式:${requestScope.name}
EL最主要的作用是获得四大作用域中的数据,格式 ${EL表达式}
EL 获得pageContext域中的值 ${pageScope.key}
EL 获得request域中的值 ${requestScope.key}
EL 获得session域中的值 ${session.Scope.key}
EL 获得application域中的值 ${applicationScope.key}
EL的内置对象11个
pageScope,requestScope,sessionScope,applicationScope --获取jsp域中的数据
param,paramValues --接收参数 相当于request.getParameter() request.getParameterValues()
header,headerValues --获取请求头信息 相当于request.getHeader(name)
initParam --获取全局初始化参数 相当于 this.getServletContext().getInitParameter(name)
cookie --web开发中的cookie 相当于 request.getCookies() --cookie.getName() -- cookie.getValue()
pageContext --web开发中的pageContext
pageContext 获得其他八大对象
${pageContext.request.contextPath} 相当于 <%=pageContext.getRequest().getContextPath %> 获得web应用的名称
EL执行表达式
${1+1}
${empty user} 判断是否为空
${user == null ? true : false}
JSTL
JSP Standard Tag Library ,jsp标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑功能。jstl出现的目的同el一样是为了代替jsp页面中脚本代码。
2.部署 将lib下的两个jar包赋值到web-inf\lib\目录下
3.测试 在jsp页面中引入核心包 <%@ taglib prefix="c" uri="http://java.sun.com.jsp/jstl/core" %>
常用标签:
1.<c:if test="" >条件判断 test后面跟boolean的条件
2.<c:forEach> for循环
if例子:
<%
int num = 1;
%>
<%if(num == 1){%>
<p><%=num%></p>
<%}%>
<c:if test="${1==1}">
<p><%=num%></p>
</c:if>
循环例子:
<ul>
<%
for (int i = 0; i < 10; i++) {
%>
<li><%=i%>
</li>
<%
}%>
</ul>
<ul>
<c:forEach begin="0" end="10" var="i">
<li>${i}</li>
</c:forEach>
</ul>
遍历对象集合
<table>
<%for(Person p : persons){%>
<tr>
<td><%=p.name%></td>
<td><%=p.age%></td>
</tr>
<%}%>
</table>
<table>
<c:forEach items="${persons}" var="p">
<tr>
<td>${p.name}</td>
<td>${p.age}</td>
</tr>
</c:forEach>
</table>