JSP总结(二):jsp指令,9大内置对象

jsp指令

这篇文章非常详细:jsp指令

指令语法格式

<%@ 指令 属性名=“值” 属性名=“值”%> (多个属性可分开写,可写在一起)

JSP2.0规范中的三大指令:
  • page
  • include
  • taglib
@page指令:

属性:

  • import 导包
  • errorPage 出错后跳转的页面,<%@ errorPage="/error/error.jsp"> 以"/"开头,相对于当前应用程序的根目录
    • web.xml中使用标签对整个web应用设置错误处理界面
  • isErrorPage 它指定当前页面是否为处理错误的页面!当该属性为true时,这个页面会设置状态码为500!而且这个页面可以使用9大内置对象中的exception!
@include

属性

  • 属性只有一个file,<%@include file="/aaa/bbb/c.jsp" %>
  • 静态包含,编译时将两个jsp编译成一个servlet
  • 而RequestDispatcher的include()是一个方法,是两个servlet,只是响应的时候合并在了一起
  • 作用:把页面分解了,使用包含的方式组合在一起,这样一个页面中不变的部分,就是一个独立jsp,而我们只需要处理变化的页面。
@taglib
  • 属性:
    • prefix:指定标签库在本页面中的前缀,由我们自己来起名字
    • url:指定标签库的位置
  • <%@taglib prefix=“x” url="/aaa/bbb"%> 前缀的用法:<s:text>

9大内置对象

这篇文章非常详细:jsp9大内置对象

jsp运行过程

JSP第一次运行时,会翻译成Servlet,所以第一次比较慢(第一次惩罚)。

JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用。

对应真身

真身中的代码:

  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;      // 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);           // 获取pageContext
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

        从这里开始,才是jsp页面内容

    }...
类型和特点:
内置对象名类型作用
pageContextjavax.servlet.jsp.PageContext页面上下文对象,一个顶8个
requestjavax.servlet.http.HttpServletRequest
responsejavax.servlet.http.HttpServletResponse
sessionjavax.servlet.http.HttpSession可设置<%@ page session=“false”%>禁止当前jsp页面使用session
applicationjavax.servlet.ServletContext
congfigjavax.servlet.ServletConfig
outjavax.servlet.jsp.JspWriter等同于response.getWrite(),向客户端发送文本数据
pagejava.lang.Object即当前jsp页面的this
exceptionjava.lang.Throwable只有在错误页面中会用到这个对象

几乎不用:

config
page
exception

不是每个jsp都能用:

exception
session

pageContext域对象

pageContext域对象,9大内置对象之一,一个顶9个,jsp专属域对象

4大域对象范围

Servlet有三大域对象,jsp有4个,

  • pageContext
    • jsp专有,范围最小,当前页面
  • request
    • 一次请求,即服务器跳转(转发)可以共享信息,客户端跳转(不是同一个请求了)不行
  • session
    • 一次会话,即一个用户共享信息,新开一个浏览器就不行了
  • application
    • 整个应用程序,即服务器属性,服务器关闭或重启就不行了
pageContext功能

域对象功能:老三样

void setAttribute(String name, Object value);
Object getAttribute(String name);
void removeAttribute(String name);

代理其他域对象功能

  • pageContext.setAttribute(“xxx”, “XXX”);
  • pageContext.setAttribute(“xxx”, “XXX”, PageContext.REQUEST_SCOPE);
  • pageContext.setAttribute(“xxx”, “XXX”, PageContext.SESSION_SCOPE);
  • pageContext.setAttribute(“xxx”, “XXX”, PageContext.APPLICATION_SCOPE);

以及:

  • void setAttribute(String name, Object value, int scope):在指定范围中添加数据;
  • Object getAttribute(String name, int scope):获取指定范围的数据;
  • void removeAttribute(String name, int scope):移除指定范围的数据;
  • Object findAttribute(String name):依次在page、request、session、application范围查找名称为name的数据,如果找到就停止查找。这说明在这个范围内有相同名称的数据,那么page范围的优先级最高!

获取其他内置对象:1个顶9个

  1. JspWriter getOut():获取out内置对象;
  2. ServletConfig getServletConfig():获取config内置对象;
  3. Object getPage():获取page内置对象;
  4. ServletRequest getRequest():获取request内置对象;
  5. ServletResponse getResponse():获取response内置对象;
  6. HttpSession getSession():获取session内置对象;
  7. ServletContext getServletContext():获取application内置对象;
  8. Exception getException():获取exception内置对象;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值