Servlet(八) —— JSP的三大指令 和 九大内置对象

Servlet(八) —— JSP的三大指令 和 九大内置对象

一、JSP指令:

1. 概述:

​ JSP中有三大指令:page、include、taglib,最为常用,也最为复杂的就是page指令了。

​ JSP指令的格式:<%@指令名 attr1=”” attr2=””%>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的。

2. page指令:

​ page指令是最为常用的指令,也是属性最多的指令!

​ page指令没有必须属性,都是可选属性。例如<%@page %>,没有给出任何属性也是可以的!

​ 在JSP页面中,任何指令都可以重复出现!

​ <%@ page language=”java”%>

​ <%@ pageimport=”java.util.*”%>

​ <%@ pagepageEncoding=”utf-8”%>

​ 这也是可以的!

  • page指令的pageEncoding和contentType属性:

    pageEncoding指定当前JSP页面的编码!这个编码是给服务器看的,服务器需要知道当前JSP使用的编码,不然服务器无法正确把JSP编译成java文件。所以这个编码只需要与真实的页面编码一致即可!

    contentType属性与response.setContentType()方法的作用相同!它会完成两项工作,一是设置响应字符流的编码,二是设置content-type响应头。

    ​ pageEncoding和contentType的默认值都是ISO-8859-1

    ​ 当pageEncoding和contentType只出现一个时,那么另一个的值与出现的值相同。如果两个都不出现,那么两个属性的值都是ISO-8859-1。所以通过我们至少设置它们两个其中一个!

  • page指令的import属性:

    import是page指令中一个很特别的属性!

    import属性值对应“真身”中的import语句。

    import属性值可以使逗号:<%@page import=”java.net.,java.util.,java.sql.*”%>

    import属性是唯一可以重复出现的属性:

二、JSP九大内置对象:

1. JSP九大内置对象有哪些:
  • out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据;
  • config(ServletConfig):对应“真身”中的ServletConfig;
  • page(当前JSP的真身类型):当前JSP页面的“this”,即当前对象;
  • pageContext(PageContext):页面上下文对象,它是最后一个没讲的域对象;
  • exception(Throwable):只有在错误页面中可以使用这个对象;
  • request(HttpServletRequest):即HttpServletRequest类的对象;
  • response(HttpServletResponse):即HttpServletResponse类的对象;
  • application(ServletContext):即ServletContext类的对象;
  • session(HttpSession):即HttpSession类的对象,不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page session=”false”%>,说明这个页面不能使用session

因为以上内置对象部分之前都学过,还有一部分现在已经不用了,所以最重要的是pageContext,一个顶八个

2. pageContext对象:

​ 在JavaWeb中一共四个域对象,其中Servlet中可以使用的是request、session、application三个对象,而在JSP中可以使用pageContext、request、session、application四个域对象,pageContext也是域对象,它的范围是当前页面。它的范围也是四个域对象中最小的!

​ pageContext 对象是PageContext类型,它的主要功能有:

  • 域对象功能

  • 代理其它域对象功能

    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范围的优先级最高!

    例子:

     pageContext.setAttribute("x", "X");
     pageContext.setAttribute("x", "XX", PageContext.REQUEST_SCOPE);
     pageContext.setAttribute("x", "XXX", PageContext.SESSION_SCOPE);
     pageContext.setAttribute("x", "XXXX", PageContext.APPLICATION_SCOPE);

  • 获取其他内置对象

    一个pageContext对象等于所有内置对象,即1个当9个。这是因为可以使用pageContext对象获取其它8个内置对象:

    JspWriter getOut():获取out内置对象;

    ServletConfig getServletConfig():获取config内置对象;

    Object getPage():获取page内置对象;

    ServletRequest getRequest():获取request内置对象;

    ServletResponse getResponse():获取response内置对象;

    HttpSession getSession():获取session内置对象;

    ServletContext getServletContext():获取application内置对象;

    Exception getException():获取exception内置对象;

三、JSP动作标签:

1. 概述:

​ 动作标签的作用是用来简化Java脚本的!

​ JSP动作标签是JavaWeb内置的动作标签,它们是已经定义好的动作标签,我们可以拿来直接使用。

​ 如果JSP动作标签不够用时,还可以使用自定义标签。JavaWeb一共提供了20个JSP动作标签,但有很多基本没有用,这里只介绍一些有坐标的动作标签。

​ JSP动作标签的格式:

2. < jsp:include >

​ < jsp:include >标签的作用是用来包含其它JSP页面的!与前面已经学习了include指令相比,虽然它们都是用来包含其它JSP页面的,但它们的实现的级别是不同的!

​ include指令是在编译级别完成的包含,即把当前JSP和被包含的JSP合并成一个JSP,然后再编译成一个Servlet。

​ include动作标签是在运行级别完成的包含,即当前JSP和被包含的JSP都会各自生成Servlet,然后在执行当前JSP的Servlet时完成包含另一个JSP的Servlet。它与RequestDispatcher的include()方法是相同的!

3. < jsp:forward >

​ forward标签的作用是请求转发!forward标签的作用与RequestDispatcher#forward()方法相同。

4. < jsp:param >

​ 还可以在< jsp:include >和< jsp:forward >标签中使用< jsp:param >子标签,它是用来传递参数的。

//给被包含的页面b.jsp传递参数
include page="/b.jsp">
        param value="zhangSan" name="username"/>
include>

你可能感兴趣的:(Servlet笔记)