Java Web 应用开发基础 - JSP内置对象

每个JSP 页面在第一次被访问时,Web 容器都会把请求交给 JSP 引擎(即一个 Java 程序)去处理。JSP 引擎先将 JSP 翻译成一个 _jspServlet (实质上也是一个 Servlet) ,然后按照Servlet的调用方式进行调用。
JSP 第一次访问时会翻译成 Servlet,所以第一次访问通常会比较慢,但第二次访问,JSP 引擎如果发现 JSP 没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。
JSP 引擎在调用 JSP 对应的 _jspServlet 时,会传递和创建 9 个 Web 开发相关的对象供 _jspServlet 使用。
JSP 技术的设计者为便于开发人员在编写 JSP 页面时获得这些 Web 对象的引用,特意定义了 9 个相应的变量,开发人员在JSP 页面中通过这些变量就可以快速获得这 9 大对象的引用。

9大内置对象

  • pageContext: javax.servlet.jsp.PageContext
  • request: javax.servlet.http.HttpServletRequest
  • response: javax.servlet.http.HttpServletResponse
  • session: javax.servlet.http.HttpSession
  • application: javax.servlet.ServletContext
  • config: javax.servlet.ServletConfig
  • out: javax.servlet.jsp.JspWriter
  • page: java.lang.Object
  • exception: java.lang.Throwable

pageContext对象

pageContext 对象是 JSP 技术中最重要的一个对象,它代表 JSP 页面的运行环境,这个对象不仅封装了对其它 8 大隐式对象的引用,它自身还是一个域对象(容器),可以用来保存数据。并且,这个对象还封装了 Web 开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。

  • getException 方法返回 exception 隐式对象
  • getPage 方法返回 page 隐式对象
  • getRequest 方法返回 request 隐式对象
  • getResponse 方法返回 response 隐式对象
  • getServletConfig 方法返回 config 隐式对象
  • getServletContext 方法返回 application 隐式对象
  • getSession 方法返回 session 隐式对象
  • getOut 方法返回 out 隐式对象

pageContext 作为域对象

pageContext 对象可以作为容器来使用,因此可以将一些数据存储在 pageContext 对象中。

  • public void setAttribute(java.lang.String name,java.lang.Object value)
  • public java.lang.Object getAttribute(java.lang.String name)
  • public void removeAttribute(java.lang.String name)
  • public java.lang.Object findAttribute(java.lang.String name)

findAttribute方法按照查找顺序 “page→request→session→application” 在这四个对象中去查找,只要找到了就返回属性值,如果四个对象都没有找到要查找的属性,则返回一个null

pageContext 对象 findAttribute 方法查找属性值

<%@page contentType="text/html;charset=UTF-8"%>
<%@page import="java.util.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
    <title>pageContext的findAttribute方法查找属性值</title>
</head>
<%
    pageContext.setAttribute(“name1”, “九格科技");
    request.setAttribute(“name2”, “教育培训");
    session.setAttribute(“name3”, “技术服务");
    application.setAttribute(“name4”, “电子商务");
%>
<%
    //使用pageContext的findAttribute方法查找属性,由于取得的值为Object类型,因此必须使用String强制向下转型,转换成String类型
    //查找name1属性,按照顺序"page→request→session→application"在这四个对象中去查找
    String refName1 = (String)pageContext.findAttribute("name1");
    String refName2 = (String)pageContext.findAttribute("name2");
    String refName3 = (String)pageContext.findAttribute("name3");
    String refName4 = (String)pageContext.findAttribute("name4");
    String refName5 = (String)pageContext.findAttribute("name5");//查找一个不存在的属性
%>
<h1>pageContext.findAttribute方法查找到的属性值:</h1>
<h3>pageContext对象的name1属性:<%=refName1%></h3>
<h3>request对象的name2属性:<%=refName2%></h3>
<h3>session对象的name3属性:<%=refName3%></h3>
<h3>application对象的name4属性:<%=refName4%></h3>
<h3>查找不存在的name5属性:<%=refName5%></h3>
<hr/>
<h1>使用EL表达式进行输出:</h1>
<h3>pageContext对象的name1属性:${name1}</h3>
<h3>request对象的name2属性:${name2}</h3>
<h3>session对象的name3属性:${name3}</h3>
<h3>application对象的name4属性:${name4}</h3>
<h3>不存在的name5属性:${name5}</h3>

pageContext 对象中封装了访问其它域

  • 访问其他域方法
public java.lang.Object getAttribute(java.lang.String name,int scope)
public void setAttribute(java.lang.String name, java.lang.Object value,int scope)
public void removeAttribute(java.lang.String name,int scope)
  • 其他域常量
PageContext.APPLICATION_SCOPE
PageContext.SESSION_SCOPE
PageContext.REQUEST_SCOPE
PageContext.PAGE_SCOPE 
  • 示例
pageContext.setAttribute(“name”,“九格科技",PageContext.SESSION_SCOPE);
String name= (String)pageContext.getAttribute("name",PageContext.SESSION_SCOPE); 

pageContext 的 forward 方法跳转到其他资源

PageContext 类中定义了一个 forward 方法(用来跳转页面) 来简化 RequestDispatcher.forward 方法

<%
     //使用pageContext.forward(relativeUrlPath)替代RequestDispatcher.forward(relativeUrlPath)    
    
     //使用pageContext的forward方法跳转到index.jsp页面,/代表了当前的web应用   
     pageContext.forward("/index.jsp");
     //使用RequestDispatcher的forward方法实现的跳转方式
     //pageContext.getRequest().getRequestDispatcher("/index.jsp").forward(request, response);
%>

pageContext的 include 方法引入其他资源

<%
    pageContext.include("/jspfragments/header.jsp");
%>
    使用pageContext的include方法引入资源
<%
    pageContext.include("/jspfragments/footer.jsp");
%>
<hr/>
<%--
<jsp:include page="/jspfragments/header.jsp"/>
使用jsp:include标签引入资源
<jsp:include page="/jspfragments/footer.jsp"/>
--%>

request 对象

  • Web 服务器收到客户端的 HTTP 请求,会针对每一次请求,分别创建一个用于代表请求的 request 对象、和代表响应的 response 对象。
  • HttpServletRequest 对象代表客户端的请求,当客户端通过 HTTP 协议访问服务器时,HTTP 请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。

获得客户机信息

String requestUrl = request.getRequestURL().toString();//得到请求的URL地址
String requestUri = request.getRequestURI();//得到请求的资源

完整阅读:https://www.laobingbiji.com/page/202405081539180000000010367926.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值