jsp隐式对象-作用域
session对象:
1.定义:
a. session对象是客户端与服务器端的一次会话(连接到服务器开始,直到客户端与服务器端断开连接结束)
b. javax.serlvet.http.HttpSession的接口实例
2.作用:
session对象用来保存每个客户的信息,用来检测每个用户的使用状态(操作状态)
3.执行:
session对象会给新用户一个唯一标识session id并保存在客户端的cookie中,用来区别其他客户
*session信息保存在客户端容器里面,session id保存在客户机的cookie中
4.有效时间:(session空间的有效期)
a. 用户关闭正在浏览的浏览器程序
b. 关闭网页服务器
c. 用户未向服务器提出请求超过预设的时间,Tomcat服务器默认为30分钟
d. 运行结束session的程序
5. session的常用方法
getAttribute(String name):获取与指定名字相联系的属性。
getAttributeNames():返回session对象中的存储的每一个属性的对象
getCreateTime():返回创建session对象的时间,单位为毫秒
getId():返回session对象在服务器端的id号
getLastAccessedTime():返回session对象在最后一次发送请求的请求时间
getMaxInactiveInterval():返回session对象的生存时间,单位为秒
setMaxInactiveInterval( int interval):设置session对象的生存时间,单位为秒
setAttribute(String name, java.lang.Object value):设置指定名字属性的属性值,并将它存储在session对象中
invalidate():销毁session对象,使得与其绑定的对象都无效
6.访问session中的数据
a. 建立session变量:
session.setAttribute("变量名称",变量内容(String类型));
b. 返回session中的数据(获取session内的数据):
session.getAttribute("变量名称"); //返回的类型为Object型
c. 清除session中的变量:
session.removeAttribute("变量名称"); //消除指定名称的session对象的数据
d. 结束session:
session.invalidate(); //将session结束,销毁session对象
7.session对象实例:
a. 创建session对象和获取session对象的数据
/***Demo1.jsp***/
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
<title>session</title>
</head>
<body>
<%
session.setAttribute("information","向session中保存数据");
response.sendRedirect("Demo1_to.jsp");
%>
</body>
</html>
/***Demo1_to.jsp***/
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
<title>session保存信息页面</title>
</head>
<body>
<%
out.print(session.getAttribute("information"));
%>
</body>
</html>
b. 设置session对象的生存时间和清除指定session对象名称的数据
/***Demo1_to.jsp***/
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
<title>session保存信息页面</title>
</head>
<body>
<%
out.print(session.getAttribute("information"));
%>
<%
session.setMaxInactiveInterval(30);
%>
<%
session.removeAttribute("information");
if (session.getAttribute("information")== null){
out.print("session对象information不存在!");
}
%>
</body>
</html>
8. session超时设置的三种方法
a. 在java代码中设置:
session.setMaxInactiveInterval(300); //session在不操作的情况的下300秒失效
b. 在项目的web.xml中设置:
<!-- 设置值为0、-1表示为永不超时,单位为分钟 -->
<session-config>
<session-timeout>1</session-timeout>
</session-config>
c. 在应用服务器中设置
优先级:a > b > c
代码实例:
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
<title>Title</title>
</head>
<body style="font-size: 40px">
<%! int number = 1; //初始化界面登录的次数%>
<%
Object obj = session.getAttribute("number"); // 获取session里面number的值
if (obj == null){ //设定number的对值 //设置session对象的值
session.setAttribute("number",String.valueOf(number));
}else{
number = Integer.parseInt(obj.toString());
number++; //统计访问的次数
session.setAttribute("number",number);
}
session.setMaxInactiveInterval(2);
%>
您访问本网站的第<%=number %>个用户,欢迎光临!
</body>
</html>
9. session对象实例
/***buy.jsp***/
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
<title>顾客</title>
</head>
<body>
<form action="goods.jsp">
<b>输入你的姓名连接到第一百货超市</b><br>
<input type="text" name="name">
<input type="submit" value="提交姓名">
</form>
</body>
</html>
/***goods.jsp***/
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<head>
<title>超市</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
Object name = request.getParameter("name");
session.setAttribute("name",name);
%>
<form action="account.jsp">
<b>请输入你想购买的商品连接到结账</b><br>
<input type="text" name="goods">
<input type="submit" value="提交商品">
</form>
</body>
</html>
/***account.jsp***/
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>结账</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
Object goods = request.getParameter("goods");
session.setAttribute("goods",goods);
%>
<b>这是结账处</b><br>
<b>顾客的名字是:</b><%=session.getAttribute("name") %><br>
<b>顾客买的商品是:</b><%=session.getAttribute("goods") %>
</body>
</html>
application对象
1.定义
Application是一个所有在线用户共享的数据存取区。服务器启动application对象就被创建,直到网页服务器关闭或者超过预定时间application对象会自动消失。客户浏览各个网页,application都是同一个。
2. session与application的区别
session对象是每个客户专用的,私有的,存放私有变量
application对象是共享数据存取区,公共的存放全局变量
3. 方法
1. setAttribute(String name,Object o);//设置application对象的属性名及其属性值
2. getAttribute(String name);//获取指定的属性名的属性值
3. getAttributeNames();//获取Enumeration类型的application对象的某个初始值
4. getServerInfo();//获取servlet编译器当前的版本信息
5. getContext(String uripath);//获取指定的WebApplication的application对象
6. getMimeType(String file);//获取application对象指定文件的MIME类型
7. getResource(String path);//获取application对象指定资源的url路径
8. getServlet(String name);//获取application对象指定的Servlet
4. 存取application中的数据
1.建立application对象
application.setAttribute("变量名称","变量内容")
2.获取application对象值
application.getAttribute("变量名称");
application.getAttributeNames();//返回的是application中所有对象名称的集合对象,数据类型为数组
3.删除application对象
application.removeAttribute("变量名称");
实例1:留言板
/***inputMessage.jsp***/
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>输入信息</title>
</head>
<body>
<form action="checkMessage.jsp" method="post">
请输入姓名:<input type="text" name="name"><br>
请输入标题:<input type="text" name="title"><br>
请输入内容:<textarea name="message" cols="40" rows="10"></textarea><br>
<input type="submit" value="留言">
</form>
<form action="showMessage.jsp" method="post" id="form2">
<input type="submit" value="查看留言板">
</form>
</body>
</html>
/***checkMessage.jsp***/
%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="jdk.nashorn.internal.ir.CallNode" %>
<%@ page import="java.util.logging.SimpleFormatter" %>
<%@ page import="java.util.Calendar" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>信息处理</title>
</head>
<body>
<%!
List<String> v = new ArrayList<String>();
int i = 0;
%>
<%
String datetime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(Calendar.getInstance().getTime());//获取系统时间
%>
<%
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String title = request.getParameter("title");
String message = request.getParameter("message");
%>
<%
if(name == null || "".equals(name.trim())){
name = "网友" + (int)(Math.random()*10000+10000); //当name为null时将会输出5位数的随机数
}
if (title == null || "".equals(title.trim())){
title = "无";
}
if (message == null || "".equals(message.trim())){
message = "无";
}
%>
<%
i++;
String str = "第" + i + "楼" + ".留言人:" + name + ".标题:" + title + ".内容:" + message + ".时间:" + datetime + ".<hr>";
v.add(str);
application.setAttribute("message",v);
%>
留言成功:<a href="inputMessage.jsp">返回留言板</a>
</body>
</html>
/***showMessage.jsp***/
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.StringTokenizer" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>留言内容</title>
</head>
<body>
<%
Object o = application.getAttribute("message");
if (o == null) {
out.print("暂时还没有人留言");
} else {
List<String> v = (ArrayList<String>) o;
for (int i = v.size() - 1; i >= 0; i--) {
StringTokenizer st = new StringTokenizer(v.get(i), ".");
while (st.hasMoreElements()) {
out.print(st.nextToken() + "<br>");
}
}
}
%>
</body>
</html>
实例2:网页计数器(有待改善)
<%@ page import="java.util.StringTokenizer" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>网页计数器</title>
</head>
<body style="font-size: 40px">
<%
int i = 0;
if (application.getAttribute("num") == null) {
application.setAttribute("num", 1);
} else {
if (session.isNew()) { //判断是否为新用户
String str = application.getAttribute("num").toString();
i = Integer.parseInt(str);
i++;
application.setAttribute("num", i);
}
}
%>
你是第<%=application.getAttribute("num") %>位访问者
</body>
</html>
5. session对象与application对象的区别
6. application对象实例
/***chat.jsp***/
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>聊天</title>
</head>
<body>
<%request.setCharacterEncoding("UTF-8"); %>
<%
if (application.getAttribute("information") == null) {
application.setAttribute("information", "Start:");
out.print((String) application.getAttribute("information"));
}
if (request.getParameter("information") != null) {
if (request.getParameter("information").trim() == "end") { //判断对话结束,未成功
application.removeAttribute("information");
out.print("对话结束!");
}
String information = request.getParameter("information");
information = (String) application.getAttribute("information") + "<br>" + information; //将之前的对话复制到application对象中
application.setAttribute("information", information);
out.print((String) application.getAttribute("information"));
}
%>
<form action="chat.jsp">
<input type="text" name="information">
<input type="submit" value="发送">
</form>
</body>
</html>
page对象
1.定义
a. page对象代表正在运行的由jsp文件产生的类对象,此对象在jsp中不常用
b. java.lang.Object类的实例对象,可以使用Object类的方法
2.作用
为了执行当前页面应答请求而设置的Servlet类的实体,只有在jsp页面才合法。page隐含对象本质上包含当前Servlet接口引用的变量,可以看做this 的别名