【总结】Java Web 中的4种属性范围(page、request、session、application)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【总结】Java Web 中的4种属性范围(page、request、session、application),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7821字,纯文字阅读大概需要12分钟。
内容图文
【总结】Java Web 中的4种属性范围
我们都知道,在JSP中有4种属性的保存范围。
所谓的属性的保存范围,就是指一个内置对象,在哪些页面、多少个页面中可以保存并继续使用。
这4种属性分别是:
- page
- request
- session
- application
那么,这四种属性保存范围是什么?又分别有什么区别呢?
1、page属性范围
page属性的保存范围仅在一个页面中,即当页面发生跳转后就无效了。
- page_scope1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Page属性范围</title>
</head>
<body>
<%
pageContext.setAttribute("name", "奋斗中的编程菜鸟");
pageContext.setAttribute("birthday", new Date());
%>
<%
String username = (String)pageContext.getAttribute("name");
Date userbirthday = (Date)pageContext.getAttribute("birthday");
%>
<h2>姓名:<%=username %></h2>
<h2>生日:<%=userbirthday %></h2>
</body>
</html>
在上面的代码中设置属性并在本页中取得属性。
结果如图所示:
由此可见,page属性在本页中是有效的,那么,当我们进行页面跳转后,page属性还能够取得吗?
- page_scope2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Page属性范围</title>
</head>
<body>
<%
pageContext.setAttribute("name", "奋斗中的编程菜鸟");
pageContext.setAttribute("birthday", new Date());
%>
<jsp:forward page="page_scope3.jsp"/>
</body>
</html>
在上面的代码中设置属性,并进行跳转至page_scope3.jsp页面。
- page_scope3.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Page属性范围</title>
</head>
<body>
<%
String username = (String)pageContext.getAttribute("name");
Date userbirthday = (Date)pageContext.getAttribute("birthday");
%>
<h2>姓名:<%=username %></h2>
<h2>生日:<%=userbirthday %></h2>
</body>
</html>
结果如图所示:
由此可见,在page_scope2.jsp中设置的属性,当页面发生跳转后就无效了。
那如果希望页面跳转后还能够取得原页面的属性,怎么办呢?
这里就要用到request属性。
2、request属性范围
request属性范围是在服务器发生跳转时,之前的页面设置的属性仍然可以取得。
- request_scope1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Request属性范围</title>
</head>
<body>
<%
request.setAttribute("name", "奋斗中的编程菜鸟");
request.setAttribute("birthday", new Date());
%>
<jsp:forward page="request_scope2.jsp"/>
</body>
</html>
在上面的代码中设置属性,并进行跳转至request_scope2.jsp页面。
- request_scope2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Request属性范围</title>
</head>
<body>
<%
String username = (String)request.getAttribute("name");
Date userbirthday = (Date)request.getAttribute("birthday");
%>
<h2>姓名:<%=username %></h2>
<h2>生日:<%=userbirthday %></h2>
</body>
</html>
在上面的代码中获取request_scope1.jsp中设置的属性。
结果如图所示:
由此可见,request属性在服务器发生跳转后仍然有效。
可是,当我们进行超链接跳转(客户端跳转),request属性还能够继续有效吗?
- request_scope3.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Request属性范围</title>
</head>
<body>
<%
request.setAttribute("name", "奋斗中的编程菜鸟");
request.setAttribute("birthday", new Date());
%>
<a href="request_scope2.jsp">点此超链接取得属性</a>
</body>
</html>
在上面的代码中,通过超链接跳转至request_scope2.jsp页面。
结果如图所示:
由此可见,当通过超链接跳转后,request属性并不能继续保存了。
关于什么是“服务器跳转”,“客户端跳转”,二者又有什么区别?
参考链接:【比较】什么是“服务器端跳转”“客户端跳转”,二者有什么区别?
那如果希望通过超链接跳转后仍然能够保存属性,怎么操作呢?
这时就需要用到session属性了。
3、session属性保存范围
session属性保存范围是不论发生服务器跳转还是客户端跳转,属性都有效。
- session_scope1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Session属性范围</title>
</head>
<body>
<%
session.setAttribute("name", "奋斗中的编程菜鸟");
session.setAttribute("birthday", new Date());
%>
<a href="session_scope2.jsp">点此超链接取得属性</a>
</body>
</html>
在上面的代码中,设置了属性并通过超链接进行跳转至session_scope2.jsp。
- session_scope2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Session属性范围</title>
</head>
<body>
<%
String username = (String)session.getAttribute("name");
Date userbirthday = (Date)session.getAttribute("birthday");
%>
<h2>姓名:<%=username %></h2>
<h2>生日:<%=userbirthday %></h2>
</body>
</html>
这里的代码取得属性。
结果如图所示:
由此可见,session属性成功在发生客户端跳转后保持有效,可以取得。
但是,当我们重新打开一个浏览器直接访问session_scope2.jsp页面,还能够取得属性吗?
结果如图所示:
结果很显然了,重新打开新的浏览器属性无效了。
要想每次打开浏览器都能够取得属性,就要用到application属性。
4、application属性保存范围
- application_scope1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Application属性范围</title>
</head>
<body>
<%
application.setAttribute("name", "奋斗中的编程菜鸟");
application.setAttribute("birthday", new Date());
%>
<a href="application_scope2.jsp">点此超链接取得属性</a>
</body>
</html>
在上面的代码,设置属性并通过超链接跳转至application_scope2.jsp。
- application_scope2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!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>Application属性范围</title>
</head>
<body>
<%
String username = (String)application.getAttribute("name");
Date userbirthday = (Date)application.getAttribute("birthday");
%>
<h2>姓名:<%=username %></h2>
<h2>生日:<%=userbirthday %></h2>
</body>
</html>
在这里我们取得属性。
结果如图所示:
再重新打开一个浏览器:
属性值可以正常取得,所以application属性在新打开的浏览器仍然有效。
以上就是对Java Web中的四种束胸保存范围的详细介绍,通过对这四种属性的保存范围不同的比较,在实际的开发应用中才能够更好得进行运用。
内容总结
以上是互联网集市为您收集整理的【总结】Java Web 中的4种属性范围(page、request、session、application)全部内容,希望文章能够帮你解决【总结】Java Web 中的4种属性范围(page、request、session、application)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。