JSP隐式对象

时间:2020-02-23 14:33:53  来源:igfitidea点击:

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);
  }
}
}