JSP中注释方式:
<!-- 在JSP页面中可以写的注释1,HTML的方式, 在客户端的源代码中可以看到 -->
<%
//在JSP页面中可以写的注释2,Java的方式, 客户端看不到,但jspService()中可看到
/*
...
*/
%>
<%--
在JSP页面中可以写的注释3,真正的JSP方式。客户端看不到,jspService()中也看不到,保密性最好。
该注释JSP翻译程序直接略过,不翻译到jspServlet类中
--%>
JSP的隐含对像
-
request
-
response
-
config
-
pageContext – javax.servlet.jsp.PageContext – 为帮助页面快速获取信息
-
application-ServletContext
-
out – javax.servlet.jsp.JspWriter - PrintWriter
-
session – session=false.
-
exception - 只有当isErrorPage=true时才会拥有此对像。
-
page
对照jsp编译好的Servlet类找到相对应的隐藏对像。
本次重点演示pageContext,其他内置对象在Servlet中已经演示过了。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP中的隐藏对象</title>
</head>
<body>
<h1>JSP语法演示5---隐藏对象</h1>
JSP共有9个隐藏对象:<br/>
4个容器: pageContext, request, session, application<br/>
3个读取或输出信息: config, out, response<br/>
2个不常用的: page, exception(只有当页面page指令设置属性isErroPage=true时才能用)<br/>
<hr/>
pageContext: 本身当作容器使用不多,我们一般是利用它方便操作其它隐藏对象<br/>
pageContext.getServletConfig(),pageContext.getSession()<br/>
pageContext.getException(),pageContext.getServletContext()<br/>
pageContext.getOut(),pageContext.getRequest()<br/>
pageContext.getResponse(), pageContext.getPage()<br/>
通过pageContext可以获得到其他8个隐藏对象。<br/>
<hr/>
<%
pageContext.setAttribute("name", "Jack_Page"); //不常用
request.setAttribute("name", "Jack_Req");
session.setAttribute("name", "Jack_Session");
application.setAttribute("name", "Jack_App");
%>
通过容器自身的 getAttribute(key) 方法 获取存储在自身容器中 key 对应的值:<br>
pageContext>><%=pageContext.getAttribute("name")%>
request>><%=request.getAttribute("name")%>
session>><%=session.getAttribute("name")%>
application>><%=application.getAttribute("name")%>
<hr/>
通过pageContext的 getAttribute(key,scope) 方法 获取分别存储在4个容器中 key 对应的值:<br>
<%=pageContext.getAttribute("name",PageContext.PAGE_SCOPE)%>
<%=pageContext.getAttribute("name",PageContext.REQUEST_SCOPE)%>
<%=pageContext.getAttribute("name",PageContext.SESSION_SCOPE)%>
<%=pageContext.getAttribute("name",PageContext.APPLICATION_SCOPE)%>
<hr/>
同理:通过pageContext的 setAttribute(key,value,scope) 方法 修改各个容器中 key-value<br>
<%
pageContext.setAttribute("name", "Jack_Page_2",PageContext.PAGE_SCOPE); //不常用
pageContext.setAttribute("name", "Jack_Req_2",PageContext.REQUEST_SCOPE);
pageContext.setAttribute("name", "Jack_Session_2",PageContext.SESSION_SCOPE);
pageContext.setAttribute("name", "Jack_App_2",PageContext.APPLICATION_SCOPE);
%>
通过容器自身的 getAttribute(key) 方法 获取存储在自身容器中 key 对应的值:<br>
pageContext>><%=pageContext.getAttribute("name")%>
request>><%=request.getAttribute("name")%>
session>><%=session.getAttribute("name")%>
application>><%=application.getAttribute("name")%>
<hr/>
通过pageContext的 pageContext.findAttribute(key) 方法 可以如EL表达式那样实现通过key值自底向上在4个容器中查找,找到第一个就停止,否则按照:<br>
pageContext --> request --> session --> applicatio 顺序一直找下去,如果一个都没有则返回""<br>
<%
//试着逐级放开注释,观察下面输出结果
//pageContext.removeAttribute( "name", PageContext.PAGE_SCOPE );
//pageContext.removeAttribute( "name", PageContext.REQUEST_SCOPE );
//pageContext.removeAttribute( "name", PageContext.SESSION_SCOPE );
//pageContext.removeAttribute( "name", PageContext.APPLICATION_SCOPE );
%>
EL表达式:${name}<br/>
模拟EL表达式:<%=pageContext.findAttribute("name")==null?"":pageContext.findAttribute("name") %><br/>
<div style="width: 100%;height: 400px"></div>
</body>
</html>