您的位置:首页 > Web前端 > JavaScript

JSP脚本中常用的内置对象

2016-09-16 00:00 417 查看
摘要: Web JSP <<轻量级Java EE企业应用实战>>

JSP脚本中包含9个内置对象,这9个对象都是Servlet API接口的实例,只是JSP规范对它们进行了默认初始化,由JSP页面对应的Servlet的_jspService()方法来创建这些实例,在JSP页面中可以直接使用。
1 application对象:javax.servlet.ServletContext实例,代表JSP所属的Web应用本身,用于JSP页面,Servlet间交换信息,通常使用setAttribute(String attName, String attValue)方法设置某一属性名称及其值到aplication对象中,在其它地方如Servlet或JSP页面中调用getAttribute(String attrName)方法访问已设置到application对象中的指定属性名的属性值。
2 config对象:javax.servlet.ServletConfig实例,代表JSP的配置信息。常用方法有getInitParameter(String paraName)和getInitParameternames()等方法。JSP配置信息通常配置在web.xml文件中,以<context-param>标签表示一条配置信息,子标签<param-name>表示配置项的名称,子标签<param-value>表示配置项的值。例如如下示例配置了数据库驱动,配置名称为driver,值为com.mysql.jdbc.Driver

<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>

3 exception对象:java.lang.Throwable实例,代表其它页面中的异常和错误,只有当页面是错误处理页面,即页面的编译指令page的isErrorPage属性为true时,才初始化该对象,才可使用该对象,普通页面不初始化该对象,不可以使用该对象。通常调用getMessage()方法获取错误信息,调用printStackTrace()方法打印调用栈。
4 out对象:javax.servlet.jsp.JspWriter实例,代表JSP页面输出流,用于输出内容,形成HTML页面。
5 page对象:页面对应的Servlet类实例,代表该页面本身,也就是Servlet中的this,能用page的地方就可使用this。
6 pageContext对象:javax.servlet.jsp.PageContext实例,代表JSP页面上下文,使用该对象可以访问页面中的共享数据,常用方法有getServletContext()和getServletConfig()等。
7 request对象:javax.servlet.http.HttpServletRequest实例,该对象封装一次请求,客户端的请求参数都封装在该对象里,获取客户端参数时必须使用该对象,常用的方法有getParameter(String paramName),getParameterValues(String paramName),setAttribute(String attrName, Object attrValue),getAttribute(String attrName)和setCharacterEncoding(String env)等。
8 response对象:javax.servlet.http.HttpServletResponse实例,代表服务器对应客户端的响应,通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应,而response对象常用于重定向,常用的方法有getOutputStream(),sendRedirect(java.lang.String location)等。
9 session对象:javax.servlet.http.HttpSession实例,代表一次会话。当客户端浏览器与站点建立连接时,会话开始;当客户端关闭浏览器时,会话结束。通常调用setAttribute(String attrName, Object attrValue)设置属性值,调用getAttribute(String attrName)获取属性值。
以下面的HelloWorld.jsp页面为例:

<%@ 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>HelloWorld</title>
</head>
<body>
Hello, World
</body>
</html>

其对应的Servlet文件HelloWorld_jsp.java内容片段如下:

//此处省略部分代码
public final class HelloWorld_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports {

//此处省略部分代码
//_jspService方法是响应用户请求的方法
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {

final java.lang.String _jspx_method = request.getMethod();
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
return;
}

final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
//此处省略部分代码
}
}

HelloWorld_jsp.java页面就是HelloWorld.jsp经过编译后生成的java文件,也就是Servlet,几乎所有JSP页面经过编译后都有如上结构,从代码中可以看出,request,response这两个对象是_jspService()方法的形参,当Web服务器,如Tomcat调用该方法时会初始化这两个对象,而page,pageContext,application,
config,session,out都是_jspService方法的局部对象,由该方法完成初始化。这些对象要么是_jspService方法的形参,要么是该方法的局部对象,而JSP页面中的jsp脚本都会被解释成_jspService方法的执行代码,所以可以在jsp代码中直接使用这些对象。
从上面的Servlet代码中可以看出没有Exception对象,因为这个页面是普通页面,如果页面最开始的page指令中把isErrorPage属性设置为true,生成的Servlet代码中就会有Exception对象,读者可自己验证。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JSP内置对象