隐式对象使用位置

  隐式对象在转译为Servlet后,是_jspService()中的局部变量。隐式对象只能在<%与%>之间,或<%=与%>之间直接使用。
  无法在<%!与%>之间直接使用隐式对象;但可以给它传递进去,比如:

<%@page contentType="text/html" pageEncoding="UTF-8" %>
<%@page import="javax.servlet.*, java.io.PrintWriter, java.util.HashMap, java.util.Map, java.util.Set" %>
<%!
// 方法对数是传递过来的请求和响应对象
public void allBooks (HttpServletRequest request, HttpServletResponse response) {
Map<String, String> bookMap = new HashMap<String, String>();
bookMap.put("三国演义", "小说");
bookMap.put("资治通鉴", "历史");
bookMap.put("窦娥冤", "戏剧");
request.setAttribute("books", bookMap);
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>在线书籍</title>
</head>
<body>
<table style="text-align:left; width:100%;" border="0">
<tbody>
<tr>
<td style="background-color: rgb(51, 255, 255);">书名</td>
<td style="background-color: rgb(51, 255, 255);">分类</td>
</tr>
<%
// 给声明的方法把请求、响应对象传递进去
allBooks(request, response);
Map<String, String> books = (Map<String, String>)request.getAttribute("books");
Set<Map.Entry<String, String>> entries = books.entrySet();
for (Map.Entry<String, String> entry : entries) {
%>
<tr>
<td><%= entry.getKey() %></td>
<td><%= entry.getValue()%></td>
</tr>
<%
}
%>
</tbody>
</table>
</body>
</html>

1、page隐式对象

  对应于转译后Java类中的this对象。主要为不熟悉Java的网页设计师设计。


2、pageContext隐式对象

  对应于转译后servlet的javax.servlet.jsp.PageContext类型的对象。

作用:

  (1)所有的隐式对象都可以通过pageContext来取得。
  (2)pageContext还可以使用setAttribute()、getAttribute()与removeAttribute()来设置页面范围属性,默认是设置或取得页面范围的属性。
  如果传入scope参数,指定常数:pageContext.PAGE_SCOPE、pageContext.REQUEST_SCOPE、pageContext.SESSION_SCOPE、pageContext.APPLICATION_SCOPE后,分别表示在页面、请求、会话与应用程序范围内设置或取得属性。例如,设置会话范围的属性:pageContext.setAttribute("name", "zhangsan", pageContext.SESSION_SCOPE);
  当不知道属性的范围时,也可以使用pageContext的findAttribute()方法来找出属性,只要指定属性名称即可。findAttribute()会依序从页面、请求、会话、应用程序范围寻找对应的属性,先找到就返回。例如:Object attr = pageContext.findAttribute("attr");
  (3)pageContext隐式对象还具有forward()与include()方法。


3、request隐式对象

  对应于转译后servlet的HttpServletRequest类型的对象。


4、response隐式对象

  对应于转译后servlet的HttpServletResponse类型的对象。


5、session隐式对象

  对应于转译后servlet的HttpSession类型的对象。


6、application隐式对象

  对应于转译后servlet的ServletContext类型的对象。


7.out隐式对象

  不直接对应于HttpServletResponse取得的PrintWriter对象。out隐式对象在转译之后,会对应于javax.servlet.jsp.JspWriter类的实例。JspWriter直接继承自java.io.Writer类。JspWriter主要模拟了BufferedWriter与PrintWriter的功能。JspWriter在内部也是使用PrintWriter来进行输出,但JspWriter具有缓冲区功能。
  在编写JSP页面时,可以通过page指示元素的buffer属性来设置缓冲区的大小,默认值是8kb。缓冲区满了之后该采取哪种行为,则是由autoFlush属性决定值,默认值是true,表示满了就直接清除。如果设置为false,则要自行调用JspWriter的flush()方法来清除缓冲区,如果缓冲区满了却还没调用flush()将数据送出至客户端,调用println()时将会抛出IOException异常。


8. exception隐式对象

  如果在存取应用程序的时候发生了异常或错误,而没有在Servlet/JSP中处理这个异常或错误,则最后会由容器加以处理,一般容器就是直接显示异常信息与堆栈跟踪信息。

  (1)自定义异常范例,在指示元素中指定要使用的错误页面:

add.jsp

<%@page contentType="text/html" pageEncoding="UTF-8" errorPage="error.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>加法网页</title>
</head>
<body>
<%
String a = request.getParameter("a");
String b = request.getParameter("b");
out.println("a + b = " + (Integer.parseInt(a) + Integer.parseInt(b)));
%>
</body>
</html>

error.jsp

<%@page contentType="text/html" pageEncoding="UTF-8" isErrorPage="true" %>
<%@page import="java.io.PrintWriter" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>錯誤</title>
</head>
<body>
<%= exception %>
<h2>顯示例外堆疊追蹤:</h2>
<% exception.printStackTrace(new PrintWriter(out)); %>
</body>
</html>

  测试地址:http://127.0.0.1/add.jsp?a=1&b=9

  由add.jsp抛出的异常对象信息就包括在exception中。只有isErrorPage设置为true的页面才可以使用exception隐式对象。
  在这个error.jsp中的标题上,只是简单地显示exception调用toString()之后的信息,也就是<%=exception%>显示的内容;另外也可将异常堆栈跟踪显示出来。printStackTrace()接受一个PrintWriter对象作为参数,所以使用out隐式对象构造PrintWriter对象,然后再使用exception的printStackTrace()方法来显示异常堆栈跟踪。

  (2)自定义异常范例,在web.xml中指定要使用的错误页面:

  a、如果希望容器发现这类异常或错误时,可以自动转发至某个URL,则可以做如下设置。

web.xml

<?xml version="1.1" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Web Application</display-name> <error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/null.jsp</location>
</error-page> </web-app>

如果在<location>中设置的是JSP页面,则该页面必须设置isErrorPage属性为true,才可以使用exception隐式对象。

index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>空指向测试</title>
</head>
<body>
<%
String str = null;
out.println(str.toString());
%>
</body>
</html>

null.jsp

<%@page contentType="text/html" pageEncoding="UTF-8" isErrorPage="true" %>
<%@page import="java.io.PrintWriter" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>空指向异常</title>
</head>
<body>
<h1>网页发生错误:</h1>
<%= exception %>
<h2>显示异常堆栈跟踪:</h2>
<% exception.printStackTrace(new PrintWriter(out)); %>
</body>
</html>

  测试地址:http://127.0.0.1/index.jsp

  b、如果想要基于HTTP错误状态码转发至处理页面,则是搭配<error-code>来设置。例如,在找不到文件而发出404状态码时,希望都交由某个页面处理。

web.xml

<?xml version="1.1" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Web Application</display-name> <error-page>
<error-code>404</error-code>
<location>/NotFind.jsp</location>
</error-page> </web-app>

NotFind.jsp

<%@page contentType="text/html" pageEncoding="UTF-8" isErrorPage="true" %>
<%@page import="java.io.PrintWriter" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>自定义404</title>
</head>
<body>
<h1>发生错误:404</h1>
<%= exception %>
</body>
</html>

  这个设置,在自行使用HttpServletResponse的sendError()送出错误状态码时也有作用,因为sendError()只是告知容器,以容器的默认方式或web.xml中的设置来产生错误状态码的信息。


9.config隐式对象

   对应于转译后servlet的ServletConfig对象。

jsp隐式对象的更多相关文章

  1. JSP 隐式对象

    一. 隐式对象 JSP隐式对象 对象 类型 request javax.servlet.http.HttpServletRequest response javax.servlet.http.Http ...

  2. 【Head First Servlets and JSP】笔记16:JSP隐式对象(内置对象)的映射关系

    接笔记15. 1.不管是JSP中的<%%>还是<%\=%>最终都将处于servlet的方法体中,那么有没有一种元素可以声明成类的成员呢? ——答案是有,而且非常非常简单,这个元 ...

  3. jsp学习与提高(二)——JSP 隐式对象、表单处理及过滤器

    1.JSP 隐式对象 JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明.JSP隐式对象也被称为预定义变量. JSP所支持的九大隐式对象: 对象 描述 req ...

  4. JSP-Runoob:JSP 隐式对象

    ylbtech-JSP-Runoob:JSP 隐式对象 1.返回顶部 1. JSP 隐式对象 JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明.JSP隐式对 ...

  5. JSP——隐式对象(implicit object)

    Servlet容器将几个对象传递给它所运行的Servlet. 例如,在Servlet的service方法中获得HttpServletRequest和HttpServletResponse,并在init ...

  6. 有关JSP隐式对象,以下( )描述正确。

    A.隐式对象是WEB容器加载的一组类的实例,可以直接在JSP页面使用 B.不能通过config对象获取ServletContext对象 C.response对象通过sendRedirect方法实现重定 ...

  7. jsp 是什么 ,jsp 隐式对象

    google 搜索 java server page http://www.oracle.com/technetwork/java/javaee/jsp/index.html http://docs. ...

  8. JSP页面以及JSP九大隐式对象

    €JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. €JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比 ...

  9. JSP与EL隐式对象

    一,JSP隐式对象 隐式对象是可以直接使用的,无需声明.因为在JSP转译为servlet文件后,会自动声明其对象. 隐式对象① 说明 out 对应JspWriter对象,其内部关联一个PrintWri ...

随机推荐

  1. docker学习实践之路[第二站]nginx镜像实践

    上一篇文章中已经成功的拉取的nginx的镜像 在本篇文章中则详细介绍docker利用文件卷.断后映射然后进行nginx的配置. 输入一下命令: docker run -d --name mynginx ...

  2. fastjson的JSONArray转化为泛型列表

    背景:一个复杂结构体内部可能有array的数据,例如:{name:"test",cities:[{name:"shanghai",area:1,code:200 ...

  3. vector源码(参考STL源码--侯捷):空间分配导致迭代器失效

    vector源码1(参考STL源码--侯捷) vector源码2(参考STL源码--侯捷) vector源码(参考STL源码--侯捷)-----空间分配导致迭代器失效 vector源码3(参考STL源 ...

  4. Python基础之好玩的字符串格式化f-string格式

    转自白月黑羽 Python3教程 : http://www.python3.vip/doc/tutorial/python/0010/#f-string-格式化 f-string 格式化 f-stri ...

  5. redisTemplate实现轻量级消息队列, 异步处理excel并实现腾讯云cos文件上传下载

    背景 公司项目有个需求, 前端上传excel文件, 后端读取数据.处理数据.返回错误数据, 最简单的方式同步处理, 客户端上传文件后一直阻塞等待响应, 但用户体验无疑很差, 处理数据可能十分耗时, 没 ...

  6. python 生成唯一识别码

    import uuid identity = str(uuid.uuid4()).encode('ascii')

  7. 误删centos的ps命令,恢复

    脑子短路将/bin/ps文件删除.发现ps命令无法用了.下面是恢复方法 1,执行rpm -qf /bin/ps 查看ps命令所需要的rpm包 [root@iZm5e727lmif5lZ ~]# rpm ...

  8. es简单介绍及使用注意事项

    是什么? Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库. El ...

  9. [Python] 震惊, 我居然用Python干这种事ꈍ .̮ ꈍ

    阅读本文只需花费你两分钟, 两分钟你买不了吃亏,你也买不了上当. 那么, 为何不静下心来看看呢? Python 海龟创意绘画, Turtle库创作精美图画 Author:Amd794     E-ma ...

  10. MySQL主主复制以及使用keepalived保证高可用

    1:准备工作 MySQL的安装步骤在此处省略:安装完成一定要做以下准备工作,初始化MySQL,/usr/bin/mysql_secure_installation,设置root密码,删除无效账户以及t ...