JSP---JSP中4个容器-pageContext使用
这里重点只讲pageContext容器的用法哦。
因为另外的3个容器(request,session,application)在前面的servlet中已经演示过很多遍了
容器 作用域
pageContex 仅仅是当前页面,无法传参
request 当前页面,可以传参
session 同一个JSESSIONID共用一个
application 只要服务器还没重新启动,就一直存在
详细介绍:
pageContext – 它的作用范围仅为当前JSP页面。
request – 对于用户的一次请求有效,请求/响应结束即消失。
更多细节:
一个请求通过Servlet访问资源,在Servlet中将数据封装到request中,这在单位中是通常的做法。必须记住、必须记住、必须记住。
然后将请求转发到JSP页面,在从JSP页面上将封装到request中的信息取出。MVC
注意我上面说的是转发,而不是重定向。
对于用户的一次请求,并且请求完成后,数据将不再使用可使用request进行封装,以节省内存。
session – 对于用户的一次会话有效,通常我们用此域来封装用户登录的信息。也必须记住。
application – 在整个Web项目的生命周期内有效,不建议使用或谨慎使用。实际项目中根本不用。
开发原则 – 能用小的域尽量使用小的域。
setAttribute()和getAttribute:
第一种:
index.jsP;
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<h2>演示一下JSP中的4个容器---重点是pageContext,因为之前3个在servlet中学了</h2>
<%
//从小到大的4个容器
pageContext.setAttribute("name", "page-jack");
request.setAttribute("name", "request-jack");
session.setAttribute("name", "session-jack");
application.setAttribute("name", "application-jack");
%>
OKOK-------<br/>
<%
//读取4个容器中的name属性值
out.println(pageContext.getAttribute("name"));
out.println("<br/>");
out.println(request.getAttribute("name"));
out.println("<br/>");
out.println(session.getAttribute("name"));
out.println("<br/>");
out.println(application.getAttribute("name"));
%>
</body>
</html>
演示结果:
演示用pageContext设置4个容器的属性:
index.jsp:
<%
//从小到大的4个容器
//这一段的功能等价于那4个容器设置属性,这里全部通过pageContext.setAttribute()实现
pageContext.setAttribute("name", "PAGE-Jack",PageContext.PAGE_SCOPE);
pageContext.setAttribute("name", "REQUEST-Jack",PageContext.REQUEST_SCOPE);
pageContext.setAttribute("name", "SESSION-Jack",PageContext.SESSION_SCOPE);
pageContext.setAttribute("name", "APPLICATION-Jack",PageContext.APPLICATION_SCOPE);
%>
<br/>
<%
//这一段的功能等价于之前用4个容器分别读取属性值,这里全部通过pageContext.getAttribute()实现
out.println( pageContext.getAttribute("name", PageContext.PAGE_SCOPE) );
out.println("<br/>");
out.println( pageContext.getAttribute("name", PageContext.REQUEST_SCOPE) );
out.println("<br/>");
out.println( pageContext.getAttribute("name", PageContext.SESSION_SCOPE) );
out.println("<br/>");
out.println( pageContext.getAttribute("name", PageContext.APPLICATION_SCOPE) );
%>
演示结果:
演示pageContext.findAttribute():
pageContext.findAttribute()方法会依次从pageContext、request、session和application中(页面、请求、会话、app)查找对应的属性,找到一个,后面的就不会再去找了。如果没有就返回null.
<%
out.println( pageContext.findAttribute("name") );
%>
演示结果:
顺便提一下ContentType与pageEncoding的区别:
pageEncoding是jsp文件本身的编码 ,把jsp文件编译成java的时候给编译器用的 。
contentType的charset是指服务器发送给客户端时的内容编码 ,是浏览器解析网页的时候用的
如果两个任意设置了其中一个,另一个即会与此保持一致。但,contentType除可以设置charset外,还可以设置MIME类型,如text/html
JSP---JSP中4个容器-pageContext使用的更多相关文章
- jsp页面中怎么利用a标签的href进行传递参数以及需要注意的地方
jsp页面中: <a href="${pageContext.request.contextPath }/infoController/getProductInfo?productId ...
- 关于在JSP页面中为什么一定要用${pageContext.request.contextPath}来获取项目路径,而不能用${request.contextPath}?
这里的疑问在于pageContext和request都是JSP中的内置对象之一,为什么不直接用${request.contextPath}来获取项目路径? 出现这种疑问,其实是将JSP的内置对象和EL ...
- JSP页面中如何注入Spring容器中的bean
第一步在JSP页面中导入下面的包: <%@page import="org.springframework.web.context.support.WebApplicationCont ...
- JSP脚本中的9个内置对象
JSP脚本中包含9个内置对象,这9个内置对象都是Servlet API接口的实例,只是JSP规范对它们进行了默认初始化.也就是说它们已经是对象,可以直接使用. 我们随意打开一个由JSP页面生成的Ser ...
- JSP/Servlet 中的事件处理
写过AWT或Swing程序的人一定对桌面程序的事件处理机制印象深刻:通过实现Listener接口的类可以在特定事件(Event)发生时,呼叫特定的方法来对事件进行响应. 其实我们在编写JSP/Serv ...
- jsp文件中的路径问题
最近在写一个OA系统,在资源的路径问题上面出现了一点问题,使用相对路径的话不利于文件的改动,所以使用了绝对路径来写. 在jsp文件中 <%= String path = request.ge ...
- jsp 自定义标签解决jsp页面中int时间戳的时间格式化问题
jsp 自定义标签解决jsp页面中int时间戳的时间格式化问题 之前在项目中根据需求,需要自定义标签,经过查询w3c文档,自己也踩了一些坑,特此记录自定义标签的步骤,下面就以我之前的一个例子中的定义一 ...
- JSP 页面中插入图片
第一步 在 JSP 页面中插入图片 EL 表达式 ${pageContext.request.contextPath } 的值为当前的项目名称 <html> ... <body> ...
- JSP页面中的小知识
1.<%…%>和<%!…%>的区别? <%…%>用于在JSP页面中嵌入Java脚本,即代码块 <%!…%>用于在JSP页面中申明变量或方法,可以在该页面 ...
随机推荐
- PHPCMS二次开发教程(转)
转自:http://www.cnblogs.com/semcoding/p/3347600.html PHPCMS V9 结构设计 根目录 |–api 结构文件目录 |–caches 缓存文件目录 ...
- mysql索引使用笔记
1.使用explain语句查看性能mysql> explain select product_id from orders where order_id in (123, 312, 223, 1 ...
- RHEL 6.1字符界面无法登录SSH却能登录
1.具体版本: 2.具体现象: 每次输入用户名密码登录之后又跳到这个界面.但是用ssh却可以登录. 3.查看日志 [root@localhost ~]# tail -f /var/log/secure ...
- R语言的一些笔记
(1)包中函数必须在NAMESPACE中进行标记导出,否则就不认识了: 例如叫做rtest.Model.LogisticreRression 就能识别,而叫做Model.LogisticreRress ...
- Call Azure Queue get "The remote server returned an error: (400) Bad Request."
这几天开始研究Windows Azure, 在使用Azure Queue 的时候,CreateInfNotExists 总是抛出异常 "The remote server returned ...
- eclipse中mavean的使用配置
eclipse-jee-neon-R-win32 maven-3.3.9 JDK jdk-8u101-windows-i586 eclipse中配置mavean的步骤就不说了,网上很多教程,也很简单 ...
- C#中文转换成拼音英文
#region 0.1 中文转到英文 + static string GetPinYing(string characters) /// <summary> /// 中文转到英文 /// ...
- HTTP Keep-Alive详解
HTTP是一个请求<->响应模式的典型范例,即客户端向服务器发送一个请求信息,服务器来响应这个信息.在老的HTTP版本中,每个请求都将被创建一个新的客户端->服务器的连接,在这个连接 ...
- javascript pattern
bing:javascript pattern baidu:module pattern javascript高级程序设计 姊妹篇:ajax高级程序设计 http://wenku.baidu.com/ ...
- HTML5给我们带来了什么?
HTML5初探 传说中的HTML标准已经超过10年没有更新了,如今HTML5席卷全球,那么到底什么是HTML5呢?都在讲HTML5是web的新一代标准,它有着很多之前浏览器没有的新特性,可以说HTML ...