一.属性范围
page:只在一个页面中保存属性,跳转之后无效
Page范围内的对象在客户端每次请求JSP时被创建,在页面向客户端发送回应或者被forward转发时被删除。
request:只在一次请求中保存,服务器跳转之后依然有效
常用的两个方法签名如下:
public String getParameter(String name)
public String[] getParameterValues(String name)
通过forward跳转后由于相当于在一次请求中,所以信息不会被删除,但是如果通过redirect方式跳转,则相当于一个新的请求,会被删除重新创建请求。
session:在一次回话范围中,无论何种跳转都可以使用,但是新开的浏览器不能使用
作用范围是在一次用户与服务器的链接时间内,如果与服务器断开链接则删除
application:在整个服务器上保存,所有的用户都可以使用
从服务器开始执行,到服务器关闭结束
二.验证方法和代码
1.通过setAttribute可以将属性值赋给session等
2.通过getAttribute可以取得某个内置对象中存储的值
page:当前页面可以获取属性值
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><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 contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>Page</title></head>
<body>
<% // 设置属性
pageContext.setAttribute("name","测试") ;
pageContext.setAttribute("birthday",new Date()) ;
%>
<jsp:forward page="page_scope_03.jsp"/>
</body>
</html>
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><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>
其他三种测试方法同上。
三.myeclipse下跳转页面不能获取到值(留坑)
在myeclipse下通过<a href=""> 跳转的页面不能获取到session的属性值,但是同样代码下intellij idea 可以,先留个坑 等弄明白了再来写解决办法 初步猜测是版本问题
四.request方式解决中文乱码
由于浏览器默认编码是UTF-8,而和中文GBK编码是不一样的所以通过setCharacterEncoding()方法设置一个统一编码即可解决中文乱码
<%
requset.setCharacterEncoding("GBK");
%>