@@1:回顾九大内置对象和四大作用域的内容。
内置对象 类型 作用
out JspWriter 将文本信息输出给浏览器显示
request HttpServletRequest 获得浏览器发送过来的数据
response HttpServletResponse 回复浏览器的请求
session HttpSession 再不切换浏览器的情况下,存储数据
exception Throwable 当代码报错时,用于显示异常信息
page Servlet(this) 表示当前jsp翻译之后的类的对象
config ServletConfig 用于获得每一个Servlet静态数据
application ServletContext 再服务器不关闭的情况下,存储共享数据
pageContext PageContext jsp页面的管理者,由这个对象可以引导出以
pageContext:该对象中存放的数据只能页面自己用
将四大域按照共享数据的作用范围从小到大排序
pageContext
@@2补充最后一个对象pageContext对象
由pageContext对象对象引出其他八个对象
//out.write("aaaaa"); pageContext.getOut().write("这是由pageContext管理的对象哦"); //request pageContext.getRequest(); //response pageContext.getResponse(); //session pageContext.getSession(); //exception pageContext.getException(); //page pageContext.getPage(); //config pageContext.getServletConfig(); //application pageContext.getServletContext();
运行结果图
四大域的范围
请思考这个总结是对的吗?
pageContext
@1pageContext:pageContext:该对象中存放的数据只能页面自己用
@2request:在请求转发跳转页面的情况下,只能让两个页面之间共享数据
@3session:不切换浏览器的情况下,所有servlet和jsp都能共享这个对象中的所有数据
@4application:服务器不关闭的情况下,所有servlet和jsp都能共享这个对象中的所有数据
这四个对象有共同的点:都要用到setAttribute() getAttribute() removeAttribute()
请看运行效果图
@1当我在AA.jsp调用 pageContext方法时请问 BB.jsp能访问吗?
@2当我在AA.jsp调用 resquest方法时请问 BB.jsp能访问吗?
@3当我在AA.jsp调用 session方法时请问 BB.jsp能访问吗?
@4当我在AA.jsp调用 application方法时请问 BB.jsp能访问吗?
@5当我在AA.jsp调用 resquest方法时请问 BB.jsp什么情况下不能访问
@6当我在AA.jsp调用 application方法时请问 BB.jsp什么情况下不能能访问吗
带着这六个问题去总结自己的成果
@1pageContext:pageContext:该对象中存放的数据只能页面自己用。为什么?
Stacktrace: java.lang.NullPointerException at java.io.Writer.write(Writer.java:157) at org.apache.jsp.BB_jsp._jspService(BB_jsp.java:152) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)
你会发现代码报错是什么原因呢?思考一下下面解密?
@2request:在请求转发跳转页面的情况下,只能让两个页面之间共享数据
当我将请求转发的代码注释是,你获得的代码为空为什么?
当我将请求转发的代码注释解开时,你可以获得数据为什么?
@3当我在AA.jsp调用 session方法时请问 BB.jsp能访问吗?
当你换浏览器访问Sssion,Session的值为什么为null?
@4当我在AA.jsp调用 application方法时请问 BB.jsp能访问吗?
当我关闭服务器时
总结:
@ pageContext方法时请问 BB.jsp能访问吗?
答:您只需记住pageContex方法共享数据只能在本对象中访问。
@ resquest方法时请问 BB.jsp能访问吗?
答:能,在请求转发为前提下,跳转页面的情况下能访问.范围俩个页面。
@session方法时请问 BB.jsp能访问吗?
答:在浏览器不不切换浏览器的情况下。能访问
@ application方法时请问 BB.jsp能访问吗?
答:在服务器不关闭的情况下,可以访问。
剩下两个问题自信思考。
@resquest方法时请问 BB.jsp什么情况下不能访问?
@6 application方法时请问 BB.jsp什么情况下不能能访问吗?
四大域的范围 @@@@@@@非常重要
请思考这个总结是对的吗?
pageContext
@1pageContext:pageContext:该对象中存放的数据只能页面自己用
@2request:在请求转发跳转页面的情况下,只能让两个页面之间共享数据
@3session:不切换浏览器的情况下,所有servlet和jsp都能共享这个对象中的所有数据
@4application:服务器不关闭的情况下,所有servlet和jsp都能共享这个对象中的所有数据
这四个对象有共同的点:都要用到setAttribute() getAttribute() removeAttribute()
代码区
<%@page import="java.util.Calendar"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <style type="text/css"> *{ font-size: 30px; font-weight: bold; } h4{ color: red; } </style> <title>Insert title here</title> </head> <body> <h1>九大内置对象的写法</h1> <% //out.write("aaaaa"); pageContext.getOut().write("这是由pageContext管理的对象哦"); //request pageContext.getRequest(); //response pageContext.getResponse(); //session pageContext.getSession(); //exception pageContext.getException(); //page pageContext.getPage(); //config pageContext.getServletConfig(); //application pageContext.getServletContext(); %> <hr> <h4>pageContext是可以存储数据,但是其作用域只能供其本身的jsp页面使用</h4> <!-- 对象一pageContext --> <% pageContext.setAttribute("aaa", "我是pageContext的存放范围最小的数据"); pageContext.setAttribute("aa", "1001"); String info=(String)pageContext.getAttribute("aaa"); String inf=(String)pageContext.getAttribute("aa"); out.write("<br>"); out.write(info); out.write(inf); %> <!-- 对象二 request --> <h4>request对象中的数据是可以形成多个页面共享数据,但是要通过请求转发的 方式打开其他页面才能形成共享数据</h4> <% request.setAttribute("b", "我是request的数据"); //pageContext.setAttribute("bbb", "我是request的数据存放的范围是第二小的数据", PageContext.REQUEST_SCOPE); String infob=(String)request.getAttribute("b"); out.write("<br>"); out.write(infob); //request.getRequestDispatcher("BB.jsp").forward(request, response); %> <br> <h4>说明session对象能不能共享数据和浏览器有关</h4> <!-- 对象三 Session--> <% session.setAttribute("ccc", "我是session的数据存放的范围是第二大的数据"); session.setAttribute("cc", "我是session的数据存放的范围是第二大的数据1003@@@"); String c=(String)session.getAttribute("ccc"); String cc=(String)session.getAttribute("cc"); out.write(c); out.write(cc); %> <h4>这是application对象的数据与服务器有关,只要服务器不停止,数据都能共享</h4> <!-- 对象四 范围最大 --> <% pageContext.setAttribute("ddd", "我是application的数据存放的范围是第一大的数据",PageContext.APPLICATION_SCOPE); String d=(String)application.getAttribute("ddd"); application.setAttribute("dd", "我是application创建的第二个数据类型是one.two"); String dd=(String)application.getAttribute("dd"); out.write("<br>"); out.write(d); pageContext.getOut().write(dd); application.setAttribute("e", "我是application创建的第三个数据类型是one.tree"); String e=(String)application.getAttribute("e"); pageContext.getOut().write(e); application.setAttribute("f", "我是application创建的第三个数据类型是one.four"); String f=(String)application.getAttribute("f"); pageContext.getOut().write(f); %> <!-- //out.write("aaaaa"); pageContext.getOut().write("这是由pageContext管理的对象哦"); --> <h1>--------------------对象五的获取 pageContext.getOut()</h1> <% //创建日历类 Calendar calendar =Calendar.getInstance(); int AM_PM=calendar.get(calendar.AM_PM); if(AM_PM==calendar.AM){ pageContext.getOut().write("<h1 style=' color:red'>获取上午时间</h1>"); }else if(AM_PM==calendar.PM){ pageContext.getOut().write("<h1 style=' color:green'>获取下午时间</h1>"); } %> <h1>-------------page-------------对象六 </h1> <% pageContext.getOut().write((page.equals(this)?"page是当前对象":"page不是当前对象")); %> con <h1>--------------------------对象7 ----Confign </h1> <% String name = config.getServletName(); out.write(name); %> </body> </html>
private String id;
private String name;
private int age;
private String sex;
private String phone;
private String addr;
private String height;
private String weight;
private String a;
private String b;
private String c;
假如一个类中有11个属性你用什么方式存放呢?
package com.People; /** * 创建一个标准的类 * MZFAITHDREAM * 类的封装 在jsp中称为 javaBean */ public class People { private String id; private String name; private int age; private String sex; private String phone; private String addr; private String height; private String weight; private String a; private String b; private String c; public People() { System.out.println("这是无惨构造"); } public People(String id, String name, int age, String sex, String phone, String addr, String height, String weight, String a, String b, String c) { super(); this.id = id; this.name = name; this.age = age; this.sex = sex; this.phone = phone; this.addr = addr; this.height = height; this.weight = weight; this.a = a; this.b = b; this.c = c; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr; } public String getHeight() { return height; } public void setHeight(String height) { this.height = height; } public String getWeight() { return weight; } public void setWeight(String weight) { this.weight = weight; } public String getA() { return a; } public void setA(String a) { this.a = a; } public String getB() { return b; } public void setB(String b) { this.b = b; } public String getC() { return c; } public void setC(String c) { this.c = c; } @Override public String toString() { return "People [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + ", phone=" + phone + ", addr=" + addr + ", height=" + height + ", weight=" + weight + ", a=" + a + ", b=" + b + ", c=" + c + "]"; } }