JSP笔记3-JSP内置对象

9个内置对象概述

    application:javax.servlet.ServletContext实例,代表JSP所属的WEB应用本身,可以用于JSP页面或在Servlet之间的信息交换

常用方法:getAttribute、setAttribute、getInitParameter

    config:javax.servlet.servletConfig实例,该实例代表该JSP的配置信息。实际上,JSP页面无需配置,所以更多在Servlet上有效

常用方法:getInitParameter、getInitParameternames

    exception:java.lang.Throwable实例,代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page的isErrorPage属性为true时,才可使用

常用方法:getMessage、printStackTrace

    out: javax.servlet.jsp.JspWriter实例,代表JSP页面的输出流,用于输出内容,形成HTML页面

    page:代表页面本身,也就是Servlet中的this,其类型就是生成Servlet类,能用page就可以用this

    pageContext: javax.servlet.PageCOntext实例,代表该JSP页面上下文,使用该对象可以访问页面中的共享数据。

常用方法:getServletContext、getServletConfig

    request:javax.servlet.http.HttpServletRequest实例,该对像封装了一次请求,客户端的请求参数都在该对象中,获取客户端请求参数必须使用该参数

常用方法:getParameter、getParameterValues、setAttribute、getAttribute、setCharacterEncoding

    response: javax.servlet.http.HttpServletResponse实例,代表服务器对客户端的相应,通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应

常用方法:getOutputStream、sendRedirect

    session:javax.servlet.http.HttpSession实例,代表一次会话。当客户端浏览器与站点建立连接,会话开始;当客户端关闭浏览器,会话结束

常用方法:getAttribute、setAttribute

 

  • 这9个内置对象都是ServletAPI接口的实例,只是JSP规范对它们进行了默认初始化(由_jspService()方法来创建这些实例)。

打开任一JSP页面对应的Servlet文件,可以看到如下代码:

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=UTF-8");
      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;
  •         通过以上代码可以看出JSP内置对象的实质:要么是_jspServic()方法的形参,要么是_jspService()方法的局部变量,所以可以直接在JSP脚本调用这些对象,无须创建它们
  •         上述代码之所以没有exception内置对象,是因为只有异常处理页面对应的Servlet才会初始化exception对象。

application对象

  • application对象代表Web应用本身,因此使用application来操作Web应用相关数据。application对象通常有如下两个作用:
    1.在整个Web应用的多个JSP、Servlet之间共享数据。
    2.访问Web应用的配置参数。

    作用一:让多个JSP、Servlet共享数据

  • 通过setAttribute(String attrName,Object value)方法设置属性,该属性的值对整个Web应用有效,访问属性的方法为getAttribute(String attrName)。
  • setAttribute()方法示例
    <!-- 将i值自加后放入application的变量内 -->
    <%
    application.setAttribute("counter",String.valueOf(++i));
    %>
  • 可以把application理解成一个Map对象,任何JSP、servlet都可以把某个变量放入application中保存,并为之指定一个属性名;而该应用的其他JSP、Servlet就可以根据属性名来得到这个变量。

out对象

  • 在JSP页面中通过out对象写入数据,相当于将数据插入到JspWriter对象的缓冲区中,只有调用了ServletResponse.getWriter()方,缓冲区的数据才能真正写入到Servlet引擎所提供的缓存区中,如:
<!-- JSP页面内容 -->

<body>
<% out.write("aaaa"); %>
<% out.write("bbbb"); %>
<% response.getWriter().write("cccc"); %>
</body>

运行结果:

  • 从上面可以看出,写在后面的cccc在运行后却到了前面,这是因为直到JSP页面结束,out对象输入缓冲区的数据才真正写入到Servlet引擎提供的缓冲区中,而response.getWriter().write()则是直接将内容写到Servlet引擎提供的缓冲区中,Servlet引擎按照缓冲区数据存放的顺序输出内容。

pageContext对象

  • 它代表当前JSP的运行环境,使用pageContext对象可以调用JSP的其它8个内置对象(方法:pageContext.getSession()、pageContext.getRequest()、pageContext.getPage()...),这样当传递了一个pageContext对象就可以获取其它8个内置对象了。
  • pageContext是一个域对象,所以可以用来存储数据。如下例:
<!-- JSP页面内容 -->
<body>
<%pageContext.setAttribute("name", "张三"); 
pageContext.getRequest().setAttribute("name", "李四"); 
pageContext.setAttribute("name", "王二",pageContext.SESSION_SCOPE); 

String pageName = (String)pageContext.getAttribute("name");
String reqName = (String)pageContext.getAttribute("name", pageContext.REQUEST_SCOPE);
String sessName = (String)session.getAttribute("name");
%>

<%=pageName %></br>
<%=reqName %></br>
<%=sessName %>
</body>

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值