JSP基础:page,request,session,application属性范围

一.属性范围

        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");
%>

猜你喜欢

转载自blog.csdn.net/qq_37866486/article/details/83243590