zoukankan      html  css  js  c++  java
  • JSP九大内置对象

     本文摘自:李刚 著 《轻量级 Java EE企业应用实战 Struts2+Spring+hibernate整合开发》     一. 简述           JSP 页面中包含9 个内置对象,这9 个内置对象都是Servlet API 的类或者接口的实例,只是JSP 规范将它们完成了默认初始化,即它们已经是对象,可以直接使用。这9个内置对象依次如下:         (1)application:javax.servlet.ServletContext的实例,该实例代表JSP所属的WEB应用本身,可用于JSP页面,或者Servlet之间交换信息。常用的方法有getAttribute(String attName), setAttribute(String attName,String attValue)和getInitParameter(String Param)等。         (2)config:javax.servlet.ServletConfig的实例,该实例代表JSP的配置信息,常用的方法有getInitparameter(String paramName)及getInitParametername()等方法。事实上,JSP页面通常无需配置,也就不存在配置信息。因此该对象更多地在Servlet中有效。         (3)exception:java.lang.Throwable的实例,该实例代表其他页面中的错误和异常。只有当页面时错误处理页面,即编译指令的isErrorPage属性是true,该对象才可以使用。常用的方法有getMessage()和printStackTrace()等。         (4)out:javax.servlet.jsp.JspWriter的实例,该实例代表Jsp页面输出流,用于输出内容,形成HTML页面。         (5)page:代表页面本身,通常没有太大的用处,也就有是Servlet中的this,其类型就是生成Servlet。         (6)pageContext:javax.servlet.jsp.PageContext的实例,该实例代表JSP页面的上下文,使用该实例可以访问页面中的共享数据。常用的方法getServletContext()和getSevletConfig()等。         (7)request:javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求都被封装在该对象里。这是一个常用的对象,获取客户端请求参数必须使用该对象。常用的方法有:getParameter(String paramName),getParamValues(String paramName),setAttribute(String attributeName,String attributeValue),getAttribute(String attributeName)和setCharacterEncoding(String env)等。         (8)response:javax.servlet.http.HttpServletResponse的实例,代表服务器对于客户端的响应。通常,很少使用该对象直接响应,输出响应对象使用out对象,而response对象常用于重定向。常用的对象有sendRedirect(java.lang.String location)等。         (9)session:javax.servlet.http.HttpServlet的实例,该对象代表一次会话。从客户端浏览器和站点建立连接起,开始会话,直到关闭浏览器结束会话。常用的方法有getAttribute(String attName),setAttribute(String attName,String attValue)等   二. application对象   1. 让JSP和Servlet共享数据         该对象代表web应用本身,整个web应用共享一个application对象,该对象主要用于在多个JSP页面或者Servlet之间共享变量。application通过setAttribute()方法将一个值放入某个属性,该属性的值对整个Web 应用有效,因此Web 应用的每个JSP 页面或Servlet都可以访问该属性,访问属性的方法为getAttribute 。         看下面的put-application.jsp页面,该页面仅仅声明了一个整型变量,每次刷新该页面时,该变量值加1,然后将该变量的值放入application 内。下面是页面的代码: <%@ page language="java" contentType="text/html; charset=gb2132" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>APPLICATION测试</title> </head> <body> <!-- JSP声明 --> <%! int i; %> <!-- 将i值自加后放入application的变量内 --> <%application.setAttribute("counter",String.valueOf(++i));%> <!-- 直接输出application变量值 --> <%=application.getAttribute("counter"); %> </body> </html>         上面代码第13行实现了每次刷新该页面时,该变量都会先自加,并被设为application的counter属性值,即每次application的counter属性值都会加1。 看下面另一个JSP页面: <%@ page language="java" contentType="text/html; charset=gb2132" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>APPLICATION测试2</title> </head> <body> <!-- JSP声明 --> <%! int i; %> <!-- 直接输出application变量值 --> <%=application.getAttribute("counter"); %> </body> </html>         上面的代码的13行也直接输出application的属性值。虽然这个页面和put-application页面没有任何的关系,但它同样能够访问到application的属性,因为application的属性对于整个Web应用的JSP、Servlet来说都是共享的。          注意:application不仅可以用于两个JSP页面间进行共享数据。我们可以把application理解成一个Map对象,任何的jsp、servlet对象都可以将某个变量放入application中进行保存,并为之指定一个属性名; 而该应用中的其他JSP、servlet页面就可以根据这个属性名来得到这个变量。如下面的这Servlet代码所示: package ppp; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletContext; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class GetApplication extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html;cahrset = gb2132"); PrintWriter out = response.getWriter(); out.println("<html><head><title>"); out.println("测试Application"); out.println("</title></head><body>"); ServletContext sc = getServletConfig().getServletContext(); out.println("application当前的counter值为:"); out.println(sc.getAttribute("counter")); out.println("</body></html>"); } }         在上面的代码中,由于Servlet中并没有application内置对象,所以上面程序第18行代码显示获取了该web应用的ServletContext实例。每个web应用只有一个ServletContext实例,在JSP中只有通过application内置对象访问该实例,而在Servlet中则必须代码获取。         提示:该Servlet同样要编译成class文件才可以使用,实际上Servlet还需要部署。编译Servlet时可能由于没有添加环境变量出现异常,如果安装Java EE SDK,只需将Java EE SDK路径下的javaee.jar文件添加到ClASSPATH环境变量中去;如果没有安装Java EE SDK,可以将tomcat的lib路径下的jsp-api.jar、servlet-api.jar添加到CLASSPATH环境变量中去。        最后要指出的是:虽然使用application(即ServletContext实例)可以方便JSP、Servlet共享数据,但不要为了共享数据就将数据放入application对象中!由于application对象代表整个应用,所以通常只应该把web应用的状态数据放入application中。   2. 获得web应用配置参数         application还有一个重要的用处:可用于web应用的配置参数。请看如下的JSP页面,该页面访问数据,但访问数据所用的驱动、URL、用户名和密码都在web.xml文件中给出。 <%@ page language="java" contentType="text/html; charset=gb2132" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>APPLICATION测试</title> </head> <body> <% //从配置参数中获取驱动 String driver = application.getInitParameter("driver"); //从配置参数中获取数据库URL String url = application.getInitParameter("url"); //从配置参数中获取用户名 String user = application.getInitParamter("user"); //从配置参数中获取密码 String pass = application.getInitParamter("pass"); //注册驱动 Class.forName(driver); //获取数据库连接 Connection conn = DriverManager.getParameter("url,user,pass"); //创建Statement对象 Statement stmt = conn.createStatement(); //执行查询 ResultSet rs = stmt.executeQuery("Select * from newsinf"); %> <table bgcolor="9999dd" border="1" align="center"> <% //遍历结果集 while (rs.next()) { %> <tr> <td><%=rs.getString(1)%></td> <td><%=rs.getString(2)%></td> </tr> <% } %> </table> </body> </html>        上面的程序中第10行至第17行代码使用了application的getInitParameter(String paramName)来获取web应用的配置参数。这些配置参数应该在web.xml文件中使用context-param元素进行配置,每个context-param配置一个参数,该元素下有如下两个子元素:         (1) param-name:配置web参数名         (2) param-value:配置web参数值         为了给web应用配置参数,应该在web.xml文件中增加以下代码: <!--配置第一个参数driver--> <context-param> <param-name>driver</param-name> <param-value>com.mysql.jdbc.driver</param-value> </context-param> <!--配置第二个参数url--> <context-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/javaee</param-value> </context-param> <!--配置第一个参数user--> <context-param> <param-name>user</param-name> <param-value>root</param-value> </context-param> <!--配置第一个参数pass--> <context-param> <param-name>pass</param-name> <param-value>32147</param-value> </context-param>         在浏览器中浏览getWebParam.jsp页面时,可以看到数据库连接、数据查询完全成功。可见,使用application可以访问Web应用的配置参数。 注意:通过这种方式,可以将一些信息放置在web.xml文件中进行配置,避免使用一些硬编码方式写在代码中,从而更好地提高程序的可移植性。    
  • 相关阅读:
    Minimum Depth of Binary Tree leetcode java
    Maximum Depth of Binary Tree leetcode java
    Symmetric Tree leetcode java
    Same Tree leetcode java
    Binary Tree Postorder Traversal leetcode java
    Binary Tree Preorder Traversal leetcode java
    Binary Tree Inorder Traversal leetcode java
    Combinations leetcode java
    一键清除Centos iptables 防火墙所有规则
    阿里云centos7.7x64安装open,并配置ip转发和nat伪装
  • 原文地址:https://www.cnblogs.com/yzjT-mac/p/6126029.html
Copyright © 2011-2022 走看看