JSP笔记3-JSP内置对象

xiaoxiao2021-02-28  29

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>

运行结果:

 

转载请注明原文地址: https://www.6miu.com/read-2150270.html

最新回复(0)