JSP隐式对象
JSP隐式对象对开发人员非常有用。
这是《 JSP教程》系列的第二篇文章,您可能想查看关于JSP的早期文章。
JSP隐式对象
JSP隐式对象由servlet容器创建,同时将JSP页面转换为Servlet源以帮助开发人员。
我们可以直接在服务方法中使用的scriptlet中使用JSP中的隐式对象。
但是,我们无法在JSP声明中使用jsp隐式对象,因为该代码将在类级别进行。
我们有9个jsp隐式对象,可以直接在JSP页面中使用。
其中有七个在_jspService()方法开始时被声明为局部变量,而其中两个则是我们可以使用的_jspService()方法参数的一部分。
- JSP隐式对象– out对象
- JSP隐式对象–请求对象
- JSP隐式对象–响应对象
- JSP隐式对象–配置对象
- JSP隐式对象–应用程序对象
- JSP隐式对象–会话对象
- JSP隐式对象– pageContext对象
- JSP隐式对象–页面对象
- JSP隐式对象–异常对象
- JSP隐式对象示例
JSP中的隐式对象
让我们逐一研究JSP页面中的每个隐式对象。
然后,我们将通过JSP隐式对象示例。
JSP隐式对象– OutObjectJSP隐式对象是javax.servlet.jsp.JspWriter实现的实例,用于输出要在客户端响应中发送的内容。
这是最常用的JSP隐式对象之一,这就是我们拥有JSP Expression来轻松调用out.print()方法的原因。JSP隐式对象–请求对象JSP请求隐式对象是javax.servlet.http.HttpServletRequest实现的实例,它是JSP服务方法的参数之一。
我们可以使用请求对象来获取请求参数,cookie,请求属性,会话,标头信息以及有关客户端请求的其他详细信息。JSP隐式对象-响应对象JSP响应隐式对象是javax.servlet.http.HttpServletResponse实现的实例,并作为服务方法的参数来使用。
我们可以响应对象来设置内容类型,字符编码,响应中的标头信息,添加cookie以响应以及将请求重定向到其他资源。JSP隐式对象-配置对象JSP隐式对象是javax.servlet.ServletConfig实现的实例,用于获取在部署描述符中配置的JSP初始化参数。
JSP隐式对象–应用程序对象JSP应用程序隐式对象是javax.servlet.ServletContext 实现的实例,用于在JSP中获取上下文信息和属性。
我们可以使用它来获取JSP中的RequestDispatcher对象,以将请求转发到另一个资源或者在JSP中包括来自另一个资源的响应。JSP隐式对象-会话对象JSP会话隐式对象是
javax.servlet.http.HttpSession
实现的实例。
每当我们请求JSP页面时,容器都会通过service方法自动为JSP创建会话。
由于会话管理是繁重的过程,因此,如果我们不想为JSP创建会话,则可以使用page指令不创建JSP会话使用。
当我们的登录页面或者索引页面是JSP页面并且我们在那里不需要任何用户会话时,这将非常有用。JSP隐式对象– pageContext对象JSP pageContext隐式对象是javax.servlet.jsp.PageContext`抽象类实现的实例。
我们可以使用pageContext获取和设置具有不同范围的属性,并将请求转发给其他资源。
pageContext对象还保存对其他隐式对象的引用。JSP隐式对象-页面ObjectJSP页面隐式对象是java.lang.Object类的实例,它表示当前的JSP页面。
页面对象提供对生成的servlet类的引用。
这个对象很少使用。JSP隐式对象-异常ObjectJSP隐式对象是java.lang.Throwable类的实例,用于在JSP错误页面中提供异常详细信息。
我们无法在普通的JSP页面中使用此对象,并且仅在JSP错误页面中可用。
JSP隐式对象示例
这是一个简单的JSP页面,其中显示了JSP隐式对象的用法。
我没有提供异常对象示例,它将在JSP异常处理文章中介绍。
index.jsp
<%@ page language="java" contentType="text/html; charset=US-ASCII" pageEncoding="US-ASCII"%> <%@ page import="java.util.Date" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> <title>Index JSP Page</title> </head> <body> <%-- out object example --%> <h4>Hi There</h4> Current Time is: <% out.print(new Date()); %><br> <%-- request object example --%> Request User-Agent: <%=request.getHeader("User-Agent") %><br> <%-- response object example --%> <%response.addCookie(new Cookie("Test","Value")); %> <%-- config object example --%> User init param value:<%=config.getInitParameter("User") %><br> <%-- application object example --%> User context param value:<%=application.getInitParameter("User") %><br> <%-- session object example --%> User Session ID:<%=session.getId() %><br> <%-- pageContext object example --%> <% pageContext.setAttribute("Test", "Test Value"); %> PageContext attribute: {Name="Test",Value="<%=pageContext.getAttribute("Test") %>"}<br> <%-- page object example --%> Generated Servlet Name:<%=page.getClass().getName() %> </body> </html>
动态Web项目的部署描述符为:
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://java.sun.com/xml/ns/javaee" xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>JSPImplicitObjects</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <context-param> <param-name>User</param-name> <param-value>Admin</param-value> </context-param> <servlet> <servlet-name>home</servlet-name> <jsp-file>/index.jsp</jsp-file> <init-param> <param-name>User</param-name> <param-value>hyman</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>home</servlet-name> <url-pattern>/home.do</url-pattern> <url-pattern>/home.jsp</url-pattern> </servlet-mapping> </web-app>
当我在浏览器中访问以上JSP时,得到如下图所示的响应。
让我们看一下生成的servlet类代码,以更好地了解这些对象。
index_jsp.java
/* * Generated by the Jasper component of Apache Tomcat * Version: Apache Tomcat/7.0.32 * Generated at: 2013-08-22 00:42:24 UTC * Note: The last modified time of this file was set to * the last modified time of the source file after * generation to assist with modification tracking. */ package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; import java.util.Date; public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { private static final javax.servlet.jsp.JspFactory _jspxFactory = javax.servlet.jsp.JspFactory.getDefaultFactory(); private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants; private javax.el.ExpressionFactory _el_expressionfactory; private org.apache.tomcat.InstanceManager _jsp_instancemanager; public java.util.Map<java.lang.String,java.lang.Long> getDependants() { return _jspx_dependants; } public void _jspInit() { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig()); } public void _jspDestroy() { } public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { 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; try { response.setContentType("text/html; charset=US-ASCII"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("\n"); out.write("\n"); out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"https://www.w3.org/TR/html4/loose.dtd\">\n"); out.write("<html>\n"); out.write("<head>\n"); out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=US-ASCII\">\n"); out.write("<title>Index JSP Page</title>\n"); out.write("</head>\n"); out.write("<body>\n"); out.write("\n"); out.write("<h4>Hi There</h4>\n"); out.write("Current Time is: "); out.print(new Date()); out.write("<br>\n"); out.write("\n"); out.write("\n"); out.write("Request User-Agent: "); out.print(request.getHeader("User-Agent") ); out.write("<br>\n"); out.write("\n"); out.write('\n'); response.addCookie(new Cookie("Test","Value")); out.write('\n'); out.write('\n'); out.write("\n"); out.write("User init param value:"); out.print(config.getInitParameter("User") ); out.write("<br>\n"); out.write("\n"); out.write("\n"); out.write("User context param value:"); out.print(application.getInitParameter("User") ); out.write("<br>\n"); out.write("\n"); out.write("\n"); out.write("User Session ID:"); out.print(session.getId() ); out.write("<br>\n"); out.write("\n"); out.write('\n'); pageContext.setAttribute("Test", "Test Value"); out.write("\n"); out.write("PageContext attribute: {Name=\"Test\",Value=\""); out.print(pageContext.getAttribute("Test") ); out.write("\"}<br>\n"); out.write("\n"); out.write("\n"); out.write("Generated Servlet Name:"); out.print(page.getClass().getName() ); out.write("\n"); out.write("\n"); out.write("\n"); out.write("</body>\n"); out.write("</html>"); } catch (java.lang.Throwable t) { if (!(t instanceof javax.servlet.jsp.SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { out.clearBuffer(); } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else throw new ServletException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } }