历史回顾
JSP九大内置对象
jsp是运行在服务端的程序
JSP有九个内置对象(又叫隐含对象),不需要预先声明就可以在脚本代码和表达式中随意使用
JSP九大内置对象分为四类:
输入输出对象:out对象、response对象、request对象
通信控制对象:pageContext对象、session对象、application对象
Servlet对象:page对象、config对象
错误处理对象:exception对象
jsp四大作用域:page范围:只在一个页面保留数据(javax.servlet.jsp.PageContext(抽象类))
request范围:只在一个请求中保存数据(javax.servlet.httpServletRequest)
Session范围:在一次会话中保存数据,仅供单个用户使用(javax.servlet.http.HttpSession)
Application范围:在整个服务器中保存数据,全部用户共享(javax.servlet.ServletContext)
九种对象简介:
out对象:用于向客户端、浏览器输出数据。
request对象:封装了来自客户端、浏览器的各种信息。
response对象:封装了服务器的响应信息。
exception对象:封装了jsp程序执行过程中发生的异常和错误信息。
config对象:封装了应用程序的配置信息。
page对象:指向了当前jsp程序本身。
session对象:用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数
application对象:代表了当前应用程序的上下文。可以在不同的用户之间共享信息。
pageContext对象:提供了对jsp页面所有对象以及命名空间的访问。
---------------------
作者:蜘蛛侠不会飞
来源:CSDN
原文:https://blog.csdn.net/qq_40587575/article/details/79810019
版权声明:本文为博主原创文章,转载请附上博文链接!
如果四个作用域都存放了一个相同的名字的值,会取最小作用域的值。问题? 如果我就想去session的值,怎么办?
作用域scope.作用域名
会话技术
会话技术一共分为两种
客户端会话技术(Cookie)
服务器会话技术(Session)
cookie
cookie常见的案例如:浏览器登录页面记住用户名和密码,QQ登录界面记住用户名和密码等。
作用:将数据存储到本地为了智能填充数据,还能够增强用户体验,缓解服务器压力。
如何给自己的网站缓存数据
首先设置:cookie值Cookie cookie = new Cookie("cookie名","cookie值"); 然后再把cookie值响应添加到浏览器中:response.addCookie(cookie);
response 是可以将信息返回到浏览器上,所以设置Cookie 的时候是借助Response对象将Cookie发送到本地浏览器。
获取Cookie的方法时通过reqeust 进行获取,注意获取cookie时不能获取某一个,只能获取所有cookie的集合,我们遍历判断后可以去到响应的值。注意cookie是一个对象,不能直接取值赋值。
Cookie的属性
int maxAge 该Cookie失效时间,单位秒。如果为正数,则Cookie在maxAge秒之后失效。
如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存Cookie.如果为0,表示删除Cookie。默认是-1
Integer.MAX_VALUE表示永远有效
注意:设置cookie属性必须放到addCookie之前,即响应到页面之前设置各种属性,否则修改属性无效!
案例:记住账号密码
注意点
1.获取参数信息是getParameter(),获取属性是getAttribute()不要搞混了
2.cookie对象的属性设置一定要在响应添加cookie(response.addCookie())数据之前
3.读取cookie值不能单个读取,只能读取一个数组,遍历获然后if判断即可获取具体的值
4.登陆界面的读取cookie值的java代码片段<%。。。%>一定要在form表单之前,否则无效
form表单
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<%//在这里获取cookie的值,这样第二次登陆的时候就会自动添加了,必须要在form表单之前,不然等到form表单加载之后再复制就永远都不会显示了
Cookie[] c = request.getCookies();
if(null != c){//首先判断该集合非空
for(Cookie co:c){
if("user".equals(co.getName())){
pageContext.setAttribute("user", co.getValue());
}
if("pwd".equals(co.getName())){
pageContext.setAttribute("pwd", co.getValue());
}
}
}
%>
<form action="cookieServlet" method="post">
用户名:<input type="text" placeholder="请输入账号" name="user" value="${user }"><br>
密码:<input type="password" placeholder="请输入密码" name="pwd" value="${pwd }"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
Servlet
package cookie;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/cookieServlet")
public class CookieServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置页面字符集
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//从页面获取信息
String user = (String)request.getParameter("user");//获取参数用geyparameter,不要和getattribute搞混了
String pwd = (String)request.getParameter("pwd");
//获取cookie对象并设置其属性
Cookie c1 = new Cookie("user",user);
Cookie c2 = new Cookie("pwd",pwd);
c1.setMaxAge(60*60);
c2.setMaxAge(60*60);
//将获取到的cookie响应到本地浏览器中
response.addCookie(c1);
response.addCookie(c2);
//重定向到指定登陆成功页面
response.sendRedirect("success.jsp");
}
}
成功页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
欢迎登陆!
</body>
</html>
Session会话技术
服务端会话技术
Servlet的一个对象,全称HttpSession,同时也是一个作用域。
生活中实例
登录网站,关闭浏览器之后会提示你重新登录。
如何做到关闭浏览器后通知你重新登录。
Session作用域的特性
存放的值可以跨页面,只要你不关闭浏览器那么你的作用域的值就一直存在。也就意味着会话不结束session长存(可以设置最大存活时间)。
实际项目中如何实现访问页面拦截
在登录成功之后,将用户的ID或者对象存到Session中,如果访问页面的时候判断Session中存在这个ID 意味着现在已经登录可以访问本页面,如果ID获取不到,意味着没有登录。
会话跟踪技术
实际说session不具备检测浏览器开启关闭的功能,所以能实现的原理就在JSESSION上。能实现这种技术要依赖cookie
案例:用户登录
- 如果用户没有登录,需要跳转到login.jsp
- 如果用户登录了,允许访问任意本项目页面,并且在页面中显示登录的账号
- 如果关闭浏览器,需要重新登录。
实现步骤:
- 用户登录成功之后将名称保存到session中
- 在本项目各个页面获取用户账号,只需要判断账号是否匹配即可,因为如果没登陆肯定什么都没有,只要登陆了密码肯定是正确的
关闭服务器后者关闭浏览器,再次访问非登录,跳转到登陆页面中。关闭浏览器之后如果跳过登陆页面访问其他页面直接给跳转到了Login.JSP页面,只需要在登陆成功页面加这样一段判断即可,应用了session作用域在浏览器关闭之前有效。
Session是服务器对象,为什么关闭服务器在启动我们还能够获取session信息
session 的活化与钝化功能。
简单说明:
活化:将session从本地读取到内存中 (启动服务器的时候)
钝化:从内存中将数据保存到本地硬盘 (关闭服务器的时候)
session一般都保存一些非常重要的数据,开发者为了不会因为服务器异常关闭导致内存中的数据丢失,会将数据钝化到本地。 重启后直接恢复到内存中。 数据一直存在。
Tomcat服务器默认支持session活化与钝化功能。