JSP的九大内置对象、指令和动作标签

JSP的九大内置对象

1、request—>(HttpServletRequest)

  • request对象是javax.servlet.http.HttpServletRequest 类的实例。HttpServletRequest是ServletRequest接口的子接口。

  • request内置对象是使用最多的一个对象,每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。

  • 主要作用是接收客户端发送而来的请求信息,如请求的参数、发送的头信息等都属于客户端发来的信息。

  • request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。

  • 客户端的请求信息被封装在request对象中,通过他才能了解到客户端需求,然后做出响应。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。

  • 当服务器端想得到客户端信息时就会使用request对象来完成。

  • 常用场景介绍:

    • 1、乱码解决(setCharacterEncoding)
    • 2、接收请求参数(getParameter() 或者一组 getParameterValues())
    • 3、显示全部的头信息(getHeader()或者getHeaderNames() )
    • 4、角色验证(isUserInRole()返回一个Boolean)

2、response—>(HttpServletResponse)

  • response对象属于javax.servlet.http.HttpServletResponse接口的实例。
    HttpServletResponse继承自SrevletResponse
  • 当服务器创建request对象时会同时创建用于响应这个客户端的response对象。
  • response对象的主要作用是对客户端的请求进行回应,将Web服务器处理后的结果发回给客户端。
  • 通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。
  • 常用场景介绍:
    • 1、设置响应头信息(setHeader页面的定时跳转)
    • 2、设置将发送到客户端的响应的内容类型:(setContentType)
    • 3、设置页面跳转(sendRedirect()重定向)
    • 4、添加Cookie(addCookie)

3、session—>(HttpSession)

  • 首先介绍什么是会话:从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个浏览器结束,称此为一个会话。

  • session表示客户端与服务器的一次会话,也就是用户浏览这个网站所花费的时间。

  • 服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。

  • session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。

  • 当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象。

  • 实际上在开发中session对象最主要的用处就是完成用户的登录(login)、注销(logout)等常见功能,每一个session对象都表示不同的访问用户。

  • 常见的应用场景

    • 1、登录及注销(设置一个session范围的属性,然后在其他需要验证的界面中判断是否存在此session范围的属性)
    • 2、判断新用户(inNew())
    • 3、取得用户的操作时间(getCreationTimesession的创建时间或者getLastAccessedTimesession的最后一次操作时间。)

4、application—>(ServletContext)

  • 这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。
  • 通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。
  • 在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作。在任何地方对application对象属性的操作,都将影响到其他用户对此的访问。
  • application对象实现了用户间数据的共享,可存放全局变量
  • application对象开始于服务器的启动,结束予服务器的关闭。
  • 常见应用场景
    • 1、获得全局变量(getAttribute或者getInitParameterNames)
    • 2、配置虚拟目录
      <Context path="/mldn" docBase="D:\myweb" />
      以上表示的是在浏览器中使用“”/mldn“”访问 "D:\myweb"目录,这时如果希望在Web开发中取得docBase对应的真实路径,就需要使用application对象中的getRealPath()方法来完成。

5、config—>(ServeltConfig)

  • config 对象的主要作用是取得服务器的配置信息。
  • 通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。
  • 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
  • config是对象是javax.servlet.ServletConfig接口的实例化对象,主要功能是取得一些初始化的配置信息。
  • 常见应用场景:
    • 获取web.xml中的配置信息
    <context-param>
    	<param-name>username</param-name>
    	<param-value>Tom</param-value>
    </context-param>
    <context-param>
    	<param-name>password</param-name>
    	<param-value>123456</param-value>
    </context-param>
    
    	String pusername = config.getInitParameter("username");
    	String pencoding = config.getInitParameter("encoding");
    

6、pageCotext—>(PageContext)

  • pageContext对象是javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面。

  • pageContext对象提供了对JSP页面内所有的对象及名字空间的访问。

  • pageContext对象可以访问到本页所在的session,也可以取本页面所在的application的某一属性值。

  • pageContext对象的本类名也叫pageContext。pageContext对象是javax.servlet.jsp.PageContext类的实例,主要表示一个JSP页面的上下文。

  • 这个对象主要用来访问页面信息,同时过滤掉大部分实现细节。

  • 这个对象存储了request对象和response对象的引用。application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。

  • pageContext对象也包含了传给JSP页面的指令信息,包括缓存信息,ErrorPage URL,页面scope等。

  • 常见应用场景

    • 获得其它八大内置对象 getXxx()
    pageContext.getRequest();
    pageContext.getResponse();
    pageContext.getServletConfig();
    pageContext.getServletContext();
    pageContext.getSession();
    pageContext.getOut();
    pageContext.getPage();
    pageContext.getException();
    
    • 对作用域的属性进行操作(四大作用域)
				  //对默认作用域的属性进行操作。page

          pageContext.getAttribute(name);  //获得page作用域数据

          pageContext.setAttribute(name,value);  //给page作用域设置内容

          pageContext.removeAttribute(name);  //给page作用域移除内容
  • 一次获得指定名称内容
    findAttribute(name);  //依次从page、request、session、application 获得内容

7、out—>(JspWrite)

  • out对象用于向客户端发送文本数据。

  • out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。

  • JSP页面中的out对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。

  • 只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:

    1、设置page指令的buffer属性关闭了out对象的缓存功能
    2、out对象的缓冲区已满
    3、整个JSP页面结束

  • out对象的工作原理
    out对象的工作原理

8、page—>(Object(this))

  • 这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。

  • page 对象就是this对象的同义词。

9、exception—>(Throwable)

  • exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设置为true,否则无法编译。
  • exception对象是java.lang.Throwable的对象。

JSP的指令介绍

1、page

  • 指令定义网页依赖属性,比如脚本语言、error页面、缓存需求等等
  • 属性
属性描述
buffer指定缓存大小,当autoFlush设为true时有效,例如<%@ page buffer=10kb%>
autoFlush是否运行缓存,如果为true,则使用out.println()等方法输出的字符串并不是立刻到达客户端服务器的,而是暂时存到缓存里,缓存满了或者程序执行完毕或者执行out.flush()操作时才到客户端,默认为true。
contentType指定当前JSP页面的MIME类型和字符编码,户端浏览器根据该属性判断文档类型,例如 HTML格式为text/html、纯文本格式为text/plain等
errorPage指明一个错误页面,如果该JSP程序抛出一个未捕捉的异常,则转到errorPage指定的页面,errorPage指定的页面通常
isErrorPage指定该页面是否为错误显示页面,如果为true,则该JSP内置有一个Exception对象exception,可直接使用,否则没有,默认为false
extends编译该JSP文件时继承哪个类,JSP为Servlet,因此当指明继承普通类时需要实现Servlet的init、destroy等方法
import引入该JSP中用到的类、包等,import是唯一可以声明多次的page指令属性,一个import可以引用uogelei,中间用英文逗号隔开,如<%@ page import=“java.util.List,java.util.ArrayList”%>
info指明JSP的信息,该信息可以通过Servlet.getServletInfo()方法获取到
isThreadSafe指定对JSP页面的访问是否为线程安全
language**解释该JSP文件时采用的语言,一般为java语言,默认为java **
session该JSP内是否内置Session对象,如果为true,则内置Session对象,可直接使用,否则反之,默认为true
isELIgnored指定是否执行EL表达式
isScriptingEnabled确定脚本元素能否被使用

2、taglib

JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。

Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

Taglib指令的语法:
<%@ taglib uri="uri" prefix="prefixOfTag" %>

uri属性确定标签库的位置,prefix属性指定标签库的前缀。

等价的XML语法:
<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />

3、include

JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。

Include指令的语法格式如下:
<%@ include file="文件相对 url 地址" %>
include 指令中的文件名实际上是一个相对的 URL 地址。

如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。

等价的XML语法:
<jsp:directive.include file="文件相对 url 地址" />

JSP的动作标签

  • 所有的动作要素都有两个属性:id属性和scope属性。
属性描述
idid属性是动作元素的唯一标识,可以在JSP页面中引用。动作元素创建的id值可以通过PageContext来调用
scope该属性用于识别动作元素的生命周期。 id属性和scope属性有直接关系,scope属性定义了相关联id对象的寿命。 scope属性有四个可能的值: (a) page, (b)request, ©session, 和 (d) application。

1、<jsp:userBean>

属性描述
id(必须的)id属性是动作元素的唯一标识,可以在JSP页面中引用。 该名称大小写敏感,必须符合JSP页面中脚本语言的命名规则。假如你使用的是Java语言,则该名称遵守的是Java命名规范。动作元素创建的id值可以通过PageContext来调用
class指定Bean的完整包名
scope该java bean对象的作用范围,可以写的就四个,也就是JSP的四大作用域,page、request、session、application
type指定将引用该对象变量的类型
beanNamebeanName属性值要么是一个完整类名,要么是一个可以转化为完整类名的表达式。用来传给Beans.instantiate方法。type属性值可和beanName属性值同,或为其超类、接口。beanName和type属性所指定的包名,类名均大小写敏感。

2、<jsp:setProperty>

  • <jsp:setProperty name=“beanName” property=“propertyName” value="">
  • jsp:setProperty用来设置已经实例化的Bean对象的属性,有两种用法。首先,你可以在jsp:useBean元素的外面(后面)使用jsp:setProperty,如下所示:
    第一种
<jsp:useBean id="myName" ... />
<--此时,不管jsp:useBean是找到了一个现有的Bean,还是新创建了一个Bean实例,jsp:setProperty都会执行-->
<jsp:setProperty name="myName" property="someProperty" .../>

第二种

<jsp:useBean id="myName" ... >
<--此时,jsp:setProperty只有在新建Bean实例时才会执行,如果是使用现有实例则不执行jsp:setProperty。-->
   <jsp:setProperty name="myName" property="someProperty" .../>
</jsp:useBean>

对Java Bean对象进行属性的设置

属性描述
namejava bean对象的名称,它表示要设置属性的是哪个Bean。也就是在useBean行为中的id
propertyproperty属性是必需的。它表示要设置哪个属性。对象中的属性名,有一个特殊用法:如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。
valuevalue 属性是可选的。要对其属性进行赋值的值,字符串数据会在目标类中通过标准的valueOf方法自动转换
paramparam 是可选的。它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法

3、<jsp:getProperty>

语法格式如下:

<jsp:useBean id="myName" ... />
<--jsp:getProperty动作提取指定Bean属性的值,转换成字符串,然后输出-->
<jsp:getProperty name="myName" property="someProperty" .../>
属性描述
name要检索的Bean属性名称。Bean必须已定义。
property表示要提取Bean属性的值

jsp:useBean、jsp:setProperty、jsp:getProperty的举例:
cn.syj.Myclass.Bean包下面的Student.java类和/day07/WebRoot/JSP下的jspAction.jsp:
Student.java

package cn.syj.Myclass.Bean;
public class Student {
   private String username;
   private String password;
   public Student() {
   	super();
   }
   public Student(String username, String password) {
   	super();
   	this.username = username;
   	this.password = password;
   }
   public String getUsername() {
   	return username;
   }
   public void setUsername(String username) {
   	this.username = username;
   }
   public String getPassword() {
   	return password;
   }
   public void setPassword(String password) {
   	this.password = password;
   }
}

jspAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>动作标签jsp:userBean</title>
</head>
<body>
<jsp:useBean id="name"  class="cn.syj.Myclass.Bean.Student" ></jsp:useBean>

<jsp:setProperty property="username" name="name" value="我是由userbean设置的username属性值"/>
<jsp:setProperty property="password" name="name" value="我是由userbean设置的password属性值"/>

<jsp:getProperty property="username" name="name"  /><br>
<jsp:getProperty property="password" name="name"  />

</body>
</html>

可以查看jspAction.jsp变为servlet后的源代码,看看我们写的javabean行为会被转换为何种语句:
源码位于:Tomcat9.0\apache-tomcat-9.0.13\work\Catalina\localhost\day07\org\apache\jsp\JSP
jsp:useBean、jsp:setProperty、jsp:getProperty运行结果展示

4、<jsp:include>

  • include行为用于运行时包含某个文件,如果被包含的文件为JSP程序,则先会执行JSP程序,然后在把执行的结果包含进来。
  • 作用是跟include指令一样的,唯一的区别就在于
  • include指令是将被包含的文件的源码加入到了本JSP程序中,然后在进行编译,属于静态包含
  • 而include行为只是将被包含的文件的运行结果包含进自己。属于动态包含
属性描述
page包含在页面中的相对URL地址。
flush布尔属性,定义在包含资源前是否刷新缓存区。

5、<jsp:forward>

<--jsp:forward动作把请求转到另外的页面。jsp:forward标记只有一个属性pagg-->
<jsp:forward page="相对 URL 地址" />
属性描述
pagepage属性包含的是一个相对URL。page的值既可以直接给出,也可以在请求的时候动态计算,可以是一个JSP页面或者一个 Java Servlet.

6、<jsp:param>

  • param 标签以“名字-值”对的形式为其他标签提供附加消息,这个标签与jsp:include、jsp:forward、jsp:plugin标签一起使用。
  • <jsp:param name=“名字”value =“指定给param的值”/>
  • 当该标签与jsp:include标签一起使用时,可以将param标签的值传递到include指令要加载的文件中去,因此include动作标签如果结合param标签,可以在加载文件的过程中向该文件提供消息。

jsp:include、jsp:forward、jsp:param的例子:
访问forwordMain.jsp

<title>forwordMain</title>
</head>
<body>
<jsp:forward  page="includeMain.jsp">
<jsp:param value="jsp:forward" name="forwordName"/>
</jsp:forward>
</body>
</html>

includeMain.jsp

<title>jsp:include</title>
</head>
<body>
<jsp:include page="head.jsp">
<jsp:param value="20" name="num"/>
</jsp:include>
</body>
</html>

head.jsp

<body>
<%=new Date() %><br>
<%=request.getParameter("num") %>
</body>
</html>

结果展示:
实现请求转发功能,Servlet中通过request.getRequestDispatcher(“someServlet”).forward(request,response);而在JSP中也能够实现相同的功能,只不过用的是<jsp:forward />行为,实际上forward行为就是对其进行了封装。
地址值并没有发生变化:
在这里插入图片描述

7、<jsp:element>

8、<jsp:attribute>

9、<jsp:body>

来自菜鸟教程
jsp:element 、 jsp:attribute、 jsp:body动作元素动态定义XML元素。动态是非常重要的,这就意味着XML元素在编译时是动态生成的而非静态。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<jsp:element name="xmlElement">
<jsp:attribute name="xmlElementAttr">
   属性值
</jsp:attribute>
<jsp:body>
   XML 元素的主体
</jsp:body>
</jsp:element>
</body>
</html>

结果展示:
来自菜鸟教程

10、<jsp:plugin>

  • jsp:plugin动作用来根据浏览器的类型,插入通过Java插件 运行Java Applet所必需的OBJECT或EMBED元素。

  • 如果需要的插件不存在,它会下载插件,然后执行Java组件。 Java组件可以是一个applet或一个JavaBean。

  • plugin动作有多个对应HTML元素的属性用于格式化Java 组件。param元素可用于向Applet 或 Bean 传递参数。

  • 建议参考:https://blog.csdn.net/liuchang54/article/details/48245721

11、<jsp:text>

来自菜鸟教程
语法格式如下:

<jsp:text>
	<jsp:text>动作元素允许在JSP页面和文档中使用写入文本的模板
</jsp:text>

text.jsp

<body>
	<books> 
		<book>
			<jsp:text>  
		    Welcome to JSP Programming
			</jsp:text>
		</book>
	</books>

</body>

运行结果展示

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值