概述
1、与Context(上下文)有关的内置对象包括session、application和pageContext;
(1)session对象表示浏览器与服务器的会话上下文环境
(2)application对象表示应用程序的上下文环境
(3)pageContext对象表示当前JSP页面上下文环境
session对象
1、session对象即会话对象,表示浏览器与服务器之间的一次会话
☞一次会话的含义是:从客户端浏览器连接服务器开始,在关闭浏览器或主动退出后,绘会话结束。这个过程可以包含浏览器与服务器之间的多次请求与响应。
2、session对象的类型为javax.servlet.http.HttpSession,session对象具有HttpSession接口的所有方法,其常用方法如下:
☞void setAttribute(String name,Object value) 以名/值对的方式存储session域属
☞Object getAttribute(String name) 根据属性名获取属性值
☞void Invalidate()使session对象失效,释放所有的属性空间
注:考虑session本身的目的,通常应该把与用户会话状态相关的信息放入session范围内,而不要因一次请求资源间的信息传递就将信息放入session范围,这样会加大服务器端的开销;对于一次请求资源的信息传递,应该把该信息放入request范围内,然后通过请求转发实现,
实例演示
演示使用setAttribute()方法对用户登陆验证成功后的用户名进行保存;在重定向的用户页面中使用getAttribute()方法获取用户名;在用户界面中实现安全退出
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//从请求属性erroMsg中获取错误信息
String error = (String)request.getAttribute("errorMsg");
if(error != null)
out.print("<font color='red'>"+ error+"</font>");
%>
<form action="loginValidate.jsp" method="post">
<p>用户名:<input name="username" type="text"/></p>
<p>密 码:<input name="password" type="password"/></p>
<p><input name="submit" type="submit" value="登陆">
</form>
</body>
</html>
loginValidate.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//设置POST请求编码
request.setCharacterEncoding("UTF-8");
//获取请求参数
String username = request.getParameter("username");
String password = request.getParameter("password");
out.print(username);
out.print(password);
StringBuffer errorMsg = new StringBuffer();
//参数信息验证
if("".equals(username)){
errorMsg.append("用户名不能为空!<br>");
}
if("".equals(password)){
errorMsg.append("密码不能为空<br>");
}else if(password.length() < 6 || password.length() > 12)
errorMsg.append("密码长度在6-12位之间,<br>");
//将错误信息爆保存在请求域属性errorMsg中
request.setAttribute("errorMsg", errorMsg.toString());
if(errorMsg.toString().equals("")){
session.setAttribute("username", username);
response.sendRedirect("main.jsp");
}else{
%>
<jsp:forward page="login.jsp"></jsp:forward>
<%
}
%>
</body>
</html>
main.jsp:
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><%--
<%=session.getAttribute("username")%>
<a href="logout.jsp">安全退出</a>
</body>
</html>
logout.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
session.invalidate();
%>
</body>
</html>