8.5、 9大内置对象
- PageContext 存东西
- Request 存东西
- Response
- Session 存东西
- Application【ServletContext】存东西
- Config【ServletConfig】
- out
- page,不用了解
- exception
pageContext.setAttribute("name1","工一1号");//保存的数据只在一个页面中有效
request.setAttribute("name2","工一2号");//保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3","工一3号");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","工一4号");//保存的数据只在服务器有效,从打开服务器到关闭服务器
request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的!
session:户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车
application:户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如:聊天数据
代码show
pageContextDemo01.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--内置对象--%>
<%
pageContext.setAttribute("name1","工一1号");//保存的数据只在一个页面中有效
request.setAttribute("name2","工一2号");//保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3","工一3号");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","工一4号");//保存的数据只在服务器有效,从打开服务器到关闭服务器
%>
<%--
脚本片段中的代码,会被原封不动的生成到.jsp.java
要求:这里的代码,必须保证Java语法的正确性
--%>
<%
//从pageContext取出,我们通过寻找的方式来
//从底层到高层(作用域):有点类似于jvm类加载的双亲委派机制
String name1 = (String) pageContext.findAttribute("name1");
String name2 = (String) pageContext.findAttribute("name2");
String name3 = (String) pageContext.findAttribute("name3");
String name4 = (String) pageContext.findAttribute("name4");
String name5 = (String) pageContext.findAttribute("name5");//不存在
pageContext.forward("/pageDemo02.jsp");
%>
<%--使用EL表达式输出,${}--%>
<h1>取出的值为:</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
<h3>${name5}</h3><%--不存在,不输出任何内容--%>
<h3><%=name5%></h3><%--不存在输出null--%>
</body>
</html>
pageContextDemo03.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
pageContext.forward("/index.jsp");
//request.getRequestDispatcher("/index.jsp").forward(request,response);//等价于上面
%>
</body>
</html>
pageDemo02.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--
脚本片段中的代码,会被原封不动的生成到.jsp.java
要求:这里的代码,必须保证Java语法的正确性
--%>
<%
//从pageContext取出,我们通过寻找的方式来
//从底层到高层(作用域):page->request->session->application
// 有点类似于jvm类加载的双亲委派机制:rt.jar -> 扩展类 ->应用类
String name1 = (String) pageContext.findAttribute("name1");
String name2 = (String) pageContext.findAttribute("name2");
String name3 = (String) pageContext.findAttribute("name3");
String name4 = (String) pageContext.findAttribute("name4");
String name5 = (String) pageContext.findAttribute("name5");//不存在
%>
<%--使用EL表达式输出,${}--%>
<h1>取出的值为:</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
<h3>${name5}</h3><%--不存在,不输出任何内容--%>
<h3><%=name5%></h3><%--不存在输出null--%>
</body>
</html>
pageDemo03.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--
//scope:作用域
public void setAttribute(String name, Object attribute, int scope) {
switch(scope) {
case 1:
this.mPage.put(name, attribute);
break;
case 2:
this.mRequest.put(name, attribute);
break;
case 3:
this.mSession.put(name, attribute);
break;
case 4:
this.mApp.put(name, attribute);
break;
default:
throw new IllegalArgumentException("Bad scope " + scope);
}
}
--%>
<%
pageContext.setAttribute("hello1","hello1",PageContext.SESSION_SCOPE);
//session.setAttribute("hello1","hello1");//等价于上面的
%>
</body>
</html>
彩蛋
1.maven工程的隐性规范【Maven-约定大于配置】
一般main下只有java和resouces,resources是给java用的
至于web目录是额外的,
web目录下,一般有static静态目录,存放静态资源。例如:/img, /css, /js, /plugins等
WEB-INF下一般放机密文件,用户不可见
2.jvm双亲 委派机制