jsp的域深入
首先,jsp有9大内置对象:9个内置对象就不用说,大家或多或少都使用过,但是,这些内置对象有其对应的作用范围,即作用域:发现作用域主要有4个:page,session,request,application:现在,我们就这4个域进行研究:首先第一步,写一个form表单,用于将数据传递到第二个页面:第二步,在第二个页面中,把获取的数据传入这个域所代表的对象中;第三部,进行page域的测试;第四部,进..._jsp将页面输入的数据放入安全域中
文章信息
- 原文链接:https://jiayq.blog.csdn.net/article/details/76151118
- 发布时间:2017-07-26 16:05:33
- 阅读量:438
- 分类:java专栏收录该内容, 订阅专栏
- 标签:#session, #jsp, #application, #request, #pageContext
摘要
文章浏览阅读438次。首先,jsp有9大内置对象:9个内置对象就不用说,大家或多或少都使用过,但是,这些内置对象有其对应的作用范围,即作用域:发现作用域主要有4个:page,session,request,application:现在,我们就这4个域进行研究:首先第一步,写一个form表单,用于将数据传递到第二个页面:第二步,在第二个页面中,把获取的数据传入这个域所代表的对象中;第三部,进行page域的测试;第四部,进…_jsp将页面输入的数据放入安全域中
首先,jsp有9大内置对象:
9个内置对象就不用说,大家或多或少都使用过,但是,这些内置对象有其对应的作用范围,即作用域:
发现作用域主要有4个:page,session,request,application:
现在,我们就这4个域进行研究:
首先第一步,写一个form表单,用于将数据传递到第二个页面:
第二步,在第二个页面中,把获取的数据传入这个域所代表的对象中;
第三部,进行page域的测试;
第四部,进行session域的测试;
第五步,进行request域的测试;
第六步,进行application域的测试。
第一步,先写一个form表单,用于获取数据:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<form method="post" action="JSP/second.jsp">
<table>
<tr>
<td>
<b>用户名:</b>
</td>
<td>
<input type="text" name = "user">
</td>
</tr>
<tr>
<td>
<b>密 码:</b>
</td>
<td>
<input type="password" name = "pswd">
</td>
</tr>
<tr>
<td>
<b>性 别:</b>
</td>
<td>
男<input type="radio" name = "sex" value="男" checked="checked">
女<input type="radio" name = "sex" value="女">
</td>
</tr>
<tr>
<td>
<b>年 龄:</b>
</td>
<td>
<input type="text" name = "age">
</td>
</tr>
<tr>
<td>
<input type="reset" value = "重置">
</td>
<td>
<input type="submit" value="提交">
</td>
</tr>
</table>
</form>
效果如下:
第二步,在第二个页面中,把获取的值进行传入:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<%
String nameString = null;
String pswdString = null;
String sexString = null;
String ageString = null;
String nmString = request.getParameter("user");
String pdString = request.getParameter("pswd");
String sString = request.getParameter("sex");
String aString = request.getParameter("age");
nameString = new String(nmString.getBytes("ISO-8859-1"),"UTF-8");
pswdString = new String(pdString.getBytes("ISO-8859-1"),"UTF-8");
sexString = new String(sString.getBytes("ISO-8859-1"),"UTF-8");
ageString = new String(aString.getBytes("ISO-8859-1"),"UTF-8");
session.setAttribute("name", nameString);
session.setAttribute("pswd", pswdString);
session.setAttribute("sex", sexString);
session.setAttribute("age", ageString);
request.setAttribute("name", nameString);
request.setAttribute("pswd", pswdString);
request.setAttribute("sex", sexString);
request.setAttribute("age", ageString);
pageContext.setAttribute("name", nameString);
pageContext.setAttribute("pswd", pswdString);
pageContext.setAttribute("sex", sexString);
pageContext.setAttribute("age", ageString);
application.setAttribute("name", nameString);
application.setAttribute("pswd", pswdString);
application.setAttribute("sex", sexString);
application.setAttribute("age", ageString);
%>
效果如下:
第三部,进行page域测试,发现,page域就是当前页面的作用范围:
所以,在当前页面对传入的值进行提取:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%
String namepageContextString = (String)pageContext.getAttribute("name");
String namesessionString = (String)session.getAttribute("name");
String namerequestString = (String)request.getAttribute("name");
String nameapplicationString = (String)application.getAttribute("name");
String pswdpageContextString = (String)pageContext.getAttribute("pswd");
String pswdsessionString = (String)session.getAttribute("pswd");
String pswdrequestString = (String)request.getAttribute("pswd");
String pswdapplicationString = (String)application.getAttribute("pswd");
String sexpageContextString = (String)pageContext.getAttribute("sex");
String sexsessionString = (String)session.getAttribute("sex");
String sexrequestString = (String)request.getAttribute("sex");
String sexapplicationString = (String)application.getAttribute("sex");
String agepageContextString = (String)pageContext.getAttribute("age");
String agesessionString = (String)session.getAttribute("age");
String agerequestString = (String)request.getAttribute("age");
String ageapplicationString = (String)application.getAttribute("age");
%>
效果如下:
发现所有的域对象都可以获取到值,说明,4大域在单个的页面内全部有效。
第四步,进行session测试,跳转到一个新的jsp页面,直接提取4大域对象的值:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>fourjsp page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
String namepageContextString = (String)pageContext.getAttribute("name");
String namesessionString = (String)session.getAttribute("name");
String namerequestString = (String)request.getAttribute("name");
String nameapplicationString = (String)application.getAttribute("name");
String pswdpageContextString = (String)pageContext.getAttribute("pswd");
String pswdsessionString = (String)session.getAttribute("pswd");
String pswdrequestString = (String)request.getAttribute("pswd");
String pswdapplicationString = (String)application.getAttribute("pswd");
String sexpageContextString = (String)pageContext.getAttribute("sex");
String sexsessionString = (String)session.getAttribute("sex");
String sexrequestString = (String)request.getAttribute("sex");
String sexapplicationString = (String)application.getAttribute("sex");
String agepageContextString = (String)pageContext.getAttribute("age");
String agesessionString = (String)session.getAttribute("age");
String agerequestString = (String)request.getAttribute("age");
String ageapplicationString = (String)application.getAttribute("age");
%>
客户信息:<br>
pageContext:<br>
姓名:<%=namepageContextString %><br>
密码:<%=pswdpageContextString %><br>
性别:<%=sexpageContextString %><br>
年龄:<%=agepageContextString %><br>
session:<br>
姓名:<%=namesessionString %><br>
密码:<%=pswdsessionString %><br>
性别:<%=sexsessionString %><br>
年龄:<%=agesessionString %><br>
request:<br>
姓名:<%=namerequestString %><br>
密码:<%=pswdrequestString %><br>
性别:<%=sexrequestString %><br>
年龄:<%=agerequestString %><br>
application:<br>
姓名:<%=nameapplicationString %><br>
密码:<%=pswdapplicationString %><br>
性别:<%=sexapplicationString %><br>
年龄:<%=ageapplicationString %><br>
</body>
</html>
效果如下:
发现page域对象和request域对象无法获取到值,说明,通过链接打开新的页面,导致request和page域失效,即page和request域的作用范围暂时是单个页面。
第五步,进行request域测试,在第二个页面中加入以下代码:
1
<jsp:forward page="/JSP/four.jsp"></jsp:forward>
然后,回到第一个信息输入页面:
进行数据输入:
点击提交:
发现page失效,但是request没有失效,而且,url是第二个页面的url,但是显示的页面是第四个页面,
在看看加入的代码,是一个jsp的动作转发:
所以,发现request域的范围>page,但是小于session和application域:
接下来我们测试session,发现session域的范围是一次会话,所以,我们关闭浏览器,直接输入第四个页面的url:
发现session的域对象失效,但是application域对象仍然有效,
到了这里,可以认为
page——-单个页面
request——–请求范围———url未变
session——–一次会话——–浏览器未关闭
application———一个项目周期———-服务器未关闭
到了这里,4大域的范围就全部清楚了。