一、内置对象

  内置对象又称内建对象、隐式对象,是由服务器自动创建实例化的,

  用户在使用时不需要显示的创建,可直接使用。

  jsp内置对象名称,类型及作用域

  

  Scope代表该内置对象的作用范围,page表示当前界面有效,application表示当前web程序范围内有效。

 作用范围从小到大为 page->request->session->application

内置对象 request:request是一个HttpServletRequest的实例化对象,当客户端请求JSP页面时,容器会自动创建一个request对象代表当前的请求。

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String url = request.getRequestURL().toString();//获取请求的URL地址
//返回URL中协议名称到查询字符串之间的部分,API中是这样说的。
//但我认为看作是,URL中服务器到请求参数之间,表示一个资源的标识的字符串更好理解。
String uri = request.getRequestURI();
String scheme = request.getScheme();//返回用于发出此请求的方案的名称,例如http、https或ftp。
String serverName = request.getServerName();//返回请求发送到的服务器的主机名。
int serverPort = request.getServerPort(); //返回请求发送到的端口号。它是主机头值(如果有)中“:”之后部分的值
String contextPath = request.getContextPath();//获取上下文路径
String query = request.getQueryString(); //获取请求URL中包含的查询字符串。
// URL: scheme://host[:port#]/path/.../[;url-params][?query-string][#anchor]
%>
<table>
<tr>
<td>
URL
</td>
<td>
<%=url %>
</td>
</tr>
<tr>
<td>
URI
</td>
<td>
<%=uri %>
</td>
</tr>
<tr>
<td>
scheme
</td>
<td>
<%=scheme %>
</td>
</tr>
<tr>
<td>
serName
</td>
<td>
<%=serverName %>
</td>
</tr>
<tr>
<td>
serverPort
</td>
<td>
<%=serverPort %>
</td>
</tr>
<tr>
<td>
contextPath
</td>
<td>
<%=contextPath %>
</td>
</tr>
<tr>
<td>
query
</td>
<td>
<%=query %>
</td>
</tr> </table>
</body>
</html>

上述主要是reques获取路径相关的方法。

reques中其他关于请求转发、包含、Session,Cookie的方法,

request.getSession();//获取Session,如果没有则创建Session

request.getCookies();//获取所有Cookie对象

request.getRequestDispatcher("xxx.jsp").forward(request,response);//请求转发到其他页面

request.setAttribute(String name, Object value);//将指定name和对应的value绑定到此request。

request.getAttribute(String name);//获取此request中指定name对应的value。

具体使用可参阅:

页面跳转(请求转发request.getDispatcher().forward(),请求包含requese.getDispatcher().include(),重定向response.sendRedirect())

URL和URI的区别:

首先我们看下名称,URL统一资源定位符,RUI统一资源标识符。

一个代表定位,一个代表标识。

标识是一个抽象的概念,比如我可以说张三是一个人对应的标识。

这个世界上可以有很多人叫张三,

内置对象 response:当服务器创建request对象时会同时创建用于响应这个客户端的response对象。

void sendRedirect(java.lang.string位置)

使用指定的重定向位置URL向客户端发送临时重定向响应。

void addcookie(cookie cookie)

将指定的cookie添加到响应中。

response.setStatue(xxx);
设置状态码,例如设置状态为404,执行后界面会显示错误.

还有一些关于头信息的操作此处就不一一列举了,有兴趣可参阅AIP。

我们看下setStatue这个方法:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage = "true"%> <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% response.setStatus(404); %>
</body>
</html>

页面本身的内容和资源都没有问题,但由于设置了响应状态码为404,

访问时会显示404错误。

:测试是最好采用IE浏览器,本例测试时采用Chrome无法显示404错误页面。

内置对象 out:JspWriter类的实例,用于把结果输出至网页上.out里面主要是一些print、println和其他方法。

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage = "true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
out.println("缓冲区空间:" + out.getBufferSize());
out.print("缓冲区剩余空间:" + out.getRemaining());
out.flush();//刷新缓冲区
out.newLine();//输出一个换行
out.println(new char[]{'1','2','3'});
out.newLine();//输出一个换行
out.println("是否自动刷新:" + out.isAutoFlush());
out.newLine();//输出一个换行
out.println("out");
%>
</body>
</html>

newLine方法输出的换行不会在界面显示出来,但可以通过查看源代码看到。

内置对象 session:session对象是 javax.servlet.http.HttpSession 类的实例。

和Java Servlets中的session对象有一样的行为。

session.getId();获取SessionID。

session.setAttrubute(String name, Object value);//使用指定的name将value绑定到此Session。

session.getAttrubute(String name);根据此session中指定的name对应的value。

session.invalidate();销毁此session。

具体使用可参阅:Session

内置对象 application:是javax.servlet.ServletContext 类的实例。

javax.servlet.ServletContext类:

定义servlet用于与其servlet容器通信的一组方法,例如,获取文件的mime类型、分派请求或写入日志文件。

每个Java虚拟机每一个“Web应用程序”都有一个上下文。

<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="UTF-8" isErrorPage = "true"%>
<%@ page import = "com.filter.SimpleFilter" %> <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
int majorVersion = application.getMajorVersion();//返回此servlet容器支持的JavaServlet API的主要版本。
int minorVersion = application.getMinorVersion();//返回此servlet容器支持的servlet API的次要版本。
String mimeType = application.getMimeType("web.xml");//获取指定文件的MIME类型,如果类型未知返回null
String path = application.getRealPath("out.jsp");//取得给定文件、文件夹的本地端绝对地址 out.println(majorVersion + "<br>");
out.println(minorVersion + "<br>");
out.println(mimeType + "<br>");
out.println(path + "<br>");
%> </body>
</html>

getRealPath获取的是本地端(服务器端)上的指定文件的绝对地址。

所以显示的是服务器本地的绝对路径,而不是URL地址。

内置对象:pageContext:

pageContext实例提供对与JSP页关联的所有名称空间的访问,提供对多个页面属性的访问

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "javax.servlet.jsp.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//获取request对象,并设置值
ServletRequest re = pageContext.getRequest();
re.setAttribute("attributeName", "request");
//获取session对象,并设置值
HttpSession se = pageContext.getSession();
se.setAttribute("attributeName", "session");
//获取ServletContext(application)对象,并设置值
ServletContext sc = pageContext.getServletContext();
sc.setAttribute("attributeName","servletContext"); //获取本页面指定name对应的值
out.println(pageContext.getAttribute("attributeName"));
//获取session-scope中指定name对应的value
out.println(pageContext.getAttribute("attributeName",pageContext.SESSION_SCOPE));
%>
</body>
</html>

第一个是获取当前页面中的“attribute”对应的value,由于当前页面没有设置,所以为null。

第二个是获取指定scope中指定name对应的value,所以是“session”。

既然有添加Attribute的方法,对应的也有移除的方法。

pageContext.removeAttribute("attrName", PAGE_SCOPE);

上列代码就代表移除指定scope中制定的attrName对应的值。

pageContext中还提供

forward(String relativeUrlPath);//转发到指定路径

inclde(String firelativeUrlPathe)//包含指定路径文件

 pageContext.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "javax.servlet.jsp.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//获取request对象,并设置值
ServletRequest re = pageContext.getRequest();
re.setAttribute("attributeName", "request");
//获取session对象,并设置值
HttpSession se = pageContext.getSession();
se.setAttribute("attributeName", "session");
//获取ServletContext(application)对象,并设置值
ServletContext sc = pageContext.getServletContext();
sc.setAttribute("attributeName","servletContext"); //转发到out.jps页面
pageContext.forward("out.jsp");
%>
</body>
</html>

out.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage = "true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% //获取request和session中设置的值
out.println(request.getAttribute("attributeName"));
out.println(session.getAttribute("attributeName"));
%>
</body>
</html>

include()方法有兴趣的可以自行测试。  

内置对象 config:config对象是 javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象。

ServletConfig主要用Servlet初始化时传递一些信息。

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
ServletContext sc = config.getServletContext();//获取ServletContext
out.println(config.getServletName()); //获取servletname
out.println(config.getInitParameter("fork"));//获取初始化参数
%>
</body>
</html>

jsp的servlet配置在tomcat下的web.xml中。

内置对象 exception:对象包装了从先前页面中抛出的异常信息。它通常被用来产生对出错条件的适当响应。

exception是java.lang.Throwable类的实例化对象,主要用于输出异常性息。

exception只有在页面设置了 <@Page isErroePage = "true"> exception内置对象才会被实例化,

如果没有设置isErrorPage = "true",当前jsp生成的Servlet中不会实例化exception,页面也无法使用exception。

JSP对应Servlet中实例化语句:

实例化中有一个request作为参数,当前exception可以接收从先前页面抛出的异常,request就是先前页面的request。

我们来看下代码:

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 设置错误跳转页面,如果发生错误会跳转到exception.jsp-->
<%@ page errorPage = "exception.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String str = null;
//request设置一个值
request.setAttribute("attribute", "indexRequest");
str.equals("123");//此处有空指针异常,由于设置了错误跳转页面,会跳转到指定页面。
%>
</body>
</html>

exception.jsp 

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage = "true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2> This exception page </h2>
     <!-- 输出异常信息 -->
<%=exception.toString() %>
<%//获取request值,并输出
out.print("<br>");
out.println(request.getAttribute("attribute"));
%>
</body>
</html>

可以看到跳转到exception.jsp后输出了前一个页面的异常信息,并且获得去前一个页面request设置的值。

page:page代表当前JSP对应的Servlet本身。

这段话可能不太好理解,我们来看下当前JSP生成的Servlet中对page的定义。

可以看到page就代表当前对象,这个平常不怎么用。

生成的Servelt中的属性基本都是private修饰的,不再当前Servlet中用page也无法访问。

page只有Object类中定义的一些方法,例如hashCode()、equals()、toString()等。

1.3(学习笔记)JSP(Java Server Pages)内置对象的更多相关文章

  1. JavaWeb笔记——Jsp的指令、内置对象和动作标签

    JSP三大指令   一个jsp页面中,可以有0~N个指令的定义! 1. page --> 最复杂:<%@page language="java" info=" ...

  2. jsp(java server pages):java服务器端的页面

    jsp(java server pages):java服务器端的页面 JSP的执行过程1.浏览器输入一个jsp页面2.tomcat会接受*.jsp请求,将该请求发送到org.apache.jasper ...

  3. JSP - (Java Server Pages) - Java服务器界面

    JSP简介: 在HTML中嵌入Java脚本代码,由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本代码,然后将生成的整个页面信息返回给客户端: 一个JSP页面包含:静态内容(HTML静态文本), ...

  4. Flutter学习笔记(36)--常用内置动画

    如需转载,请注明出处:Flutter学习笔记(36)--常用内置动画 Flutter给我们提供了很多而且很好用的内置动画,这些动画仅仅需要简单的几行代码就可以实现一些不错的效果,Flutter的动画分 ...

  5. 在IDEA中使用JSP中的out内置对象,out.println()——println红色解决方法

    今天在学习JSP的时候,在jsp中使用out内置对象,开发工具用的是IDEA,结果如下图所示 郁闷了半天找度娘,可能关键字输的不准确,乱七八糟的方法一大堆,什么加依赖啊啥的,反正都不管用,最后找到一篇 ...

  6. Jsp (Java Server Pages)相关知识九大内置对象和四大作用域

    一.初识JSP Jsp页面的组成:静态内容.指令.表达式.小脚本.声明.标准动作.注释等元素构成 Url:统一资源定位符 Url组成:协议.主机名(包括端口号).路径 1.注释的方式: 1.HTML注 ...

  7. 什么是jsp(java server pages)

    JSP是一种运行在服务器端的脚本语言,是用来开发动态网页的技术,它是JAVA Web 程序开发的重要技术.本章介绍JSP技术的相关概念以及如何开发JSP程序,主要内容包括JSP技术简介.JSP的处理过 ...

  8. Java Web学习总结(16)——JSP的九个内置对象

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  9. 【JSP】JSP基础学习记录(三)—— JSP的9个内置对象

    本节说一下JSP中的9个内置对象.这9个内置对象都是Servlet API接口的实例,只是JSP规范对他们进行了默认初始化(由JSP页面对应Servlet的_jspService()方法来创建这些实例 ...

  10. JSP学习 三大指令、九个内置对象、JavaBean、EL表达式

    1.page-->最复杂:<%@page language="java" info="xxx"...%> * pageEncoding和con ...

随机推荐

  1. centos7上安装docker-ce社区版

    报错:Error: docker-ce-selinux conflicts with 2:container-selinux-2.12-2.gite7096ce.el7.noarch 转载:http: ...

  2. lucene、solr、nutch三者的关系

    lucene是一个做搜索用的类库. nutch和solr都是基于lucene的,二者都是可直接运行的应用程序: 直接在业务上使用lucene的倒是不太多见. solr主要提供了建立索引(用户可以直接p ...

  3. Python基础(1)_初识Python

    一.为什么要编程 解放人力:让机器按照人们事先为其编写好的程序自发地去工作 二.什么是编程语言 编程语言就是程序员与计算机之间沟通的介质:程序员把自己想说的话用编程语言写到文件里,这其实就开发了一个程 ...

  4. 【洛谷 P1666】 前缀单词 (Trie)

    题目链接 考试时暴搜50分...其实看到"单词","前缀"这种字眼时就要想到\(Trie\)的,哎,我太蒻了. 以一个虚点为根,建一棵\(Trie\),然后\( ...

  5. [bzoj2594][Wc2006]水管局长数据加强版——lct+离线

    Brief Description 您有一个无向带权图,您需要支持两种操作. 询问两个点之间的最大权最小路径. 删除一条边. Algorithm Design 我们首先提出一个猜想:最优路径一定在原图 ...

  6. 转:Android 的一些比较好的开源代码项目

    转自:http://blog.csdn.net/zengyangtech/article/details/7019439 Android PDF 阅读器 http://sourceforge.net/ ...

  7. 进一步认识golang中的并发

    如果你成天与编程为伍,那么并发这个名词对你而言一定特别耳熟.需要并发的场景太多了,例如一个聊天程序,如果你想让这个聊天程序能够同时接收信息和发送信息,就一定会用到并发,无论那是什么样的并发. 并发的意 ...

  8. iOS推送原理和证书生成简介

    1. 推送流程: Provider: 我们自己的后台服务器: APNS: 苹果的消息推送服务器 (1) 当Provider有消息要推送给手机的时候,先将消息和deviceToken等字段发送到APNS ...

  9. Linux IO 同步/异步 阻塞/非阻塞

    同步IO:导致请求进程阻塞,直到IO操作完成: 是内核通知我们何时进行启动IO操作,而实际的IO操作需要当前进程本身阻塞完成: 包括:阻塞式IO模型,非阻塞式IO模型,IO复用模型,信号驱动式IO模型 ...

  10. javascript中使用el表达式获取不到数据问题

    我们通常会在jsp里面使用el表达式,把需要的值传递给 javascript 方法,例如: <p onclick="doSomething(${param})">< ...