JSP技术(二)
参考网址:https://blog.csdn.net/king_cannon_fodder/article/details/79835463
(1)JSP隐式对象(9个内置对象)
Servlet容器会传递几个对象给它运行的Servlet。例如,可以通过Servlet的service方法拿到HttpServletRequest和HttpServletResponse对象,以及可以通过init方法访问到ServletConfig对象。此外,可以通过调用HttpServletRequest对象的getSession方法访问到HttpSession对象。
在JSP中,可以通过使用隐式对象来访问上述对象。
| 对象 | 类型 |
| request | javax.servlet.http.HttpServletRequest |
| response | javax.servlet.http.HttpServletResponse |
| out | javax.servlet.jsp.JspWriter |
| session | javax.servlet.http.HttpSession |
| application | javax.servlet.ServletContext |
| config | javax.servlet.ServletConfig |
| pageContext | javax.servlet.jsp.PageContext |
| page | javax.servlet.jsp.HttpJspPage |
| exception | java.lang.Throwable |
在JSP中无需创建就可以使用的9个对象,它们是:
l out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据;
l config(ServletConfig):对应“真身”中的ServletConfig;
l page(当前JSP的真身类型):当前JSP页面的“this”,即当前对象;
l pageContext(PageContext):页面上下文对象,它是最后一个没讲的域对象;
l exception(Throwable):只有在错误页面中可以使用这个对象;
l request(HttpServletRequest):即HttpServletRequest类的对象;
l response(HttpServletResponse):即HttpServletResponse类的对象;
l application(ServletContext):即ServletContext类的对象;
l session(HttpSession):即HttpSession类的对象,不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page session=”false”%>,说明这个页面不能使用session。
(2)request、application、session对象
具体介绍一下这三个对象的使用
例如,从HttpServletRequest对象中返回username参数值:
<%
String userName=request.getParameter("userName");
%>
index.jsp
<body>
<%
request.setAttribute("p1", "request");
session.setAttribute("p2", "session");
application.setAttribute("p3", "application");
request.getRequestDispatcher("/2.jsp").forward(request, response);
%>
//这里使用El表达式取值
${requestScope.p1}
${session.p2}
${application.p3}
</body>
2.jsp
<body>
<%
out.print(request.getAttribute("p1"));
out.println();
out.print(session.getAttribute("p2"));
out.println();
out.print(application.getAttribute("p3"));
out.println();
%>
</body>
运行效果:
index.jsp

2.jsp

可以看到,application和session都可以取到index.jsp页面传过来的值,为什么request取不到值?
因为request对象既是jsp的内置对象,也是jsp的作用域之一。
此处遇到的错误原因跟request的作用域有关。在index.jsp中使用setAttribute,在当前页面index.jsp 里可以使用getAttribute来取到其值。但在2.jsp中就不行了,因为request过期了。
若想让参数在整个项目过程中前后可用,应将参数存在会话(Session)里。
部分隐式对象的使用实例:
<body>
<%
for(Enumeration<String> e=request.getHeaderNames();e.hasMoreElements();)
{
String header=e.nextElement();
out.println(header+":"+request.getHeader(header)+"<br/>");
} out.println("Buffer size:"+response.getBufferSize()+"<br/>");
out.println("Session id:"+session.getId()+"<br/>");
out.println("Servlet name:"+config.getServletName()+"<br/>");
out.println("Servle info:"+application.getServerInfo());
%>
</body>
实例运行效果:

(3)PageContext
pageContext用于javax.servlet.jsp.PageContext。它提供了有用的上下文信息,并通过其自说明方法来访问各种Servlet相关对象。如getRequest、getResponse、getServletContext、getServletConfig和getSession。我们也可以直接使用隐式对象来访问request、response、session、application。
PageContext也提供了一组用于获取和设置属性的方法,即getAttribute和setAttribute方法。属性的值可以存储在4个范围之一:页面、请求、会话和应用程序。最小的范围是页面范围,存储的属性只可以本页面使用。请求范围是指当前的ServletRequest中。会话范围指当前的HttpSession中。应用程序范围指应用的ServletContext中。
PageContext的setAttribute方法签名如下:
public abstract void setAttribute(java.lang.String name,java.lang.Object value,int scope)
scope的取值范围为PageContext对象的最终静态int值:PAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE和APPLICATION_SCOPE。
pageContext.setAttribute("x", "X");
pageContext.setAttribute("x", "XX",PageContext.REQUEST_SCOPE);
pageContext.setAttribute("x", "XXX",PageContext.SESSION_SCOPE);
pageContext.setAttribute("x", "XXXX", PageContext.APPLICATION_SCOPE);
void setAttribute(String name, Object value, int scope):在指定范围中添加数据;
Object getAttribute(String name, int scope):获取指定范围的数据;
void removeAttribute(String name, int scope):移除指定范围的数据
实例:
<body>
<%
pageContext.setAttribute("p1", "pp",PageContext.PAGE_SCOPE);
pageContext.setAttribute("p2", "pp", PageContext.REQUEST_SCOPE);
pageContext.setAttribute("p3", "pp", PageContext.APPLICATION_SCOPE);
pageContext.setAttribute("p4","pp",PageContext.SESSION_SCOPE);
String p1=(String)pageContext.getAttribute("p1");
out.println(p1);
String str1=(String)pageContext.getRequest().getAttribute("p2");
out.println(str1);
String str2=(String)pageContext.getServletContext().getAttribute("p3");
out.println(str2);
String str3=(String)pageContext.getSession().getAttribute("p4");
out.println(str3);
%>
</body>
运行效果:

JSP技术(二)的更多相关文章
- Servlet,jsp,JSP技术 ,JSP编程
一.Servlet 思考 1 浏览器可以直接打开JAVA/class文件吗? 不可以 2浏览器可以打开HTML.JS 文件吗? 可以 3 JAVA程序可以生成HTML文件吗?可以的,用IO流. 4 ...
- JavaWeb之JSP技术总结
刚接触JSP技术的时候让我想起了在大学学的Asp+VBScript,记得当时我还用aspstudy做了一个小的新闻发布系统作为期末作品,也正是在那时候在卢哥卢老师的指导下走向编程的道路,对编程越来越感 ...
- Java Web学习总结(8)JSP(二)
一,JSP中的九个内置对象 名称 类型 描述 out javax.servlet.jsp.JspWriter 用于页面输出 request javax.servlet.http.HttpServlet ...
- 学生信息管理系统--基于jsp技术和MySQL的简单增删改查
web实现增删改查的方式有很多啊,对于初学者来说当然是要先了解各部分的传值的方式.本篇博客从jsp技术的最基础方面进行说明. 一.什么是jsp技术 首先,我们要了解什么是jsp技术. jsp技术是基于 ...
- java的JSP技术
java的JSP技术 [toc] 1.JSP简介 Jsp技术是用来开发java web的页面显示的,所有MVC模型里面的视图层,所以视图层的开发 jsp不是编程语言,三个英文是java server ...
- Java Web之JSP技术
JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比htm ...
- Jsp技术总结
这节我们总结一下Jsp的相关技术. 1. 什么是JSP JSP即Java Server Pages,它和servlet技术一样,都是sun公司定义的一种用于开发动态web资源的技术.该技术的最大特点在 ...
- JSP技术
1. JSP技术简介 JSP全称是Java Server Pages,它和servlet技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.是sun公司定义的一种规范,JSP实际上就是Se ...
- JSP技术的优缺点介绍
什么是JSP?JSP可用一种简单易懂的等式表示为:HTML+Java=JSP. JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑. 网页还能通过 ...
随机推荐
- 《深入理解java虚拟机》读书笔记十——第十一章
第十一章 晚期(运行期)优化 1.HotSpot虚拟机内的即时编译 解释器与编译器: 许多Java虚拟机的执行引擎在执行Java代码的时候都有解释执行(通过解释器执行)和编译执行(通过即时编译器产生 ...
- 使用pycharm搜索框和正则表达式匹配内容
使用pycharm搜索框和正则表达式匹配内容原创薯饼__ 最后发布于2019-03-04 19:28:53 阅读数 660 收藏展开有时候我们要在爬虫网站中匹配各种各样的文本块,以获取需要的信息,每一 ...
- 基于 Ant Desigin 的后台管理项目打包优化实践
背景 按照 Ant Design 官网用 React 脚手构建的后台项目,刚接手项目的时候大概30条路由左右,我的用的机子是 Mac 8G 内存,打包完成需要耗时2分钟左右,决定优化一下. 项目技术栈 ...
- 2.Ubuntu安装 Docker
平台支持 Docker CE 支持多种平台,如下表所示 桌面 平台 架构 Docker Desktop for Mac (macOS) X64 Docker Desktop for Windows ( ...
- 一步步教你如何在Ubuntu虚拟机中安装QEMU并模拟模拟arm 开发环境(一)uImage u-boot(转)
初次接触qemu是因为工作的需要,有时候下了班,可能需要在家研究一些东西,因为博主用到arm环境,这时候博主比较小气,不愿花钱买开发板,当然博主在这里给大家的建议是,如果要真正学懂arm构架的相关知识 ...
- js--javascript学习
js -- javascript ECMAscript5 ECMAscript6 -- vue.js react .. 由三个部分组成 1 ECMAscript5的核心 js语言 2 BOM 浏览器对 ...
- HTML表单处理
一.表单简介 表单的处理是一个多进程.首先创建一张表单,以供用固话输入详细的请求信息.接着,输入的数据被发送到服务器,在服务器里这些数据得到编译和错误检测.如果PHP代码识别出一个或多个需要重新输入的 ...
- MVC5+EF6入门完整教程6:Partial View
https://i-beta.cnblogs.com/posts/edit 上篇文章提到过Partial和Action这两个helper, 本篇文章主要就结合这两个helper来讲解分部视图(Part ...
- 1052 Linked List Sorting (25分)
题目 1. 思路 使用map存放所有的地址对 使用起始地址遍历map,结果存放在vector中 排序vector 输出vector 2. 注意点 开始的时候起始地址为-1 可能有些节点没有用到,注意排 ...
- Mybaits的中的对象映射(包含仅有基本数据类型的属性的和对象类型的属性的)
转:https://blog.csdn.net/cjt20100/article/details/46547617. 1 constructor – 用来将结果反射给一个实例化好的类的构造器 a ...