【JSP】脚本、指令、内置对象和包含

目录

1.脚本元素

1.1 声明

1.2 小脚本

1.3 jsp表达式

2. 指令

2.1 page指令

2.2 include指令

3. 内置对象

4. 包含

4.1 资源跳转

4.2 静态包含

4.3 动态包含


1.脚本元素

jsp中的脚本元素包括声明、小脚本和jsp表达式三种。

1.1 声明

声明的语法格式为:<%!声明语句%>。声明在转换成servlet实现类时会被转换成该实现类的一个成员变量。因为都是转换成一个成员变量,所以声明在jsp页面中出现的位置没有要求,而且都会 根据java语言的规则为其赋予一个初始值(如果没有指定的话),可以直接使用;但是又是因为是转换成一个成员变量,一个servlet实现类在服务器容器中只会有一个实例对象,所以所有的请求都会共用同一个对象,即这些声明只会初始化一次,之后所有的请求都使用同一个变量,存在线程安全问题。

1.2 小脚本

小脚本的语法格式为:<%脚本语句%>。脚本语句里面为java代码。在转换成servlet实现类的时候会将其中的内容转换成_JspService方法中的方法体,所以里面的对象声明就会变成_JspService方法里面的局部变量。因为局部变量的使用有顺序要求(只能使用已经声明的变量),所以小脚本中的变量需要按顺序进行声明。又因为文本模板的内容也是转换成_JspService方法的方法体(通过out.write方法输出到响应体中),所以我们可以将一些需要进行循环输出到页面的语句用多个小脚本来包围,进而将其循环输出到页面中。另外,由于局部变量没有初始化值,所以小脚本中声明的对象都没有初始值,不能直接使用

1.3 jsp表达式

jsp表达式的语法格式为:<%=表达式%>。表达式的最终结果有两种处理方法。①通过out.print方法输出到页面中;②将其赋值给行为(这时叫做请求时属性表达式)。注意:jsp表达式不能赋值给指令,因为指令在转换时需要有具体的含义,在转换时,表达式并没有执行,所以不能将jsp表达式赋值给指令。

2. 指令

指令是用来对页面进行信息描述的语句,语法格式为:<%@指令 属性列表>。指令一共有三个:page、include和

2.1 page指令

page指令用来描述关于jsp页面的总体特征,这些描述适用于整个转换单元。page有9个属性。

  1. import属性:相当于java中的import关键字,用来导入相关的类。
  2. contentType属性:用来指定输出的类型,默认为text/html,即输出html文件。
  3. session属性:用来指定是否参与session(是否能使用session作用域)。
  4. pageEncoding属性:用来指定该jsp页面使用的字符集。
  5. errorPage属性:用来指定出现异常时跳转的页面。
  6. isErrorPage属性:用来指定是否是出现异常数被跳转的页面。
  7. buffer属性:用来指定输出缓冲区的大小。
  8. autoFlush属性:用来指定当缓冲区满的时候是否自动刷新缓冲区。
  9. info属性:用来指定该jsp页面的一些描述,可以在jsp表达式中使用getServletInfo方法来获取值。

2.2 include指令

放到包含中一起讲。

3. 内置对象

jsp页面转换成servlet实现类后,其对象中会包含9个隐含变量,通过使用这些变量可以很方便的进行请求作用域数据的获取和设置,也可以完成一些其他功能。下面介绍一些常用的变量:

作用域对象

  1. application:对应ServletContext类的对象,其请求作用域范围为整个应用程序。
  2. session:对应HttpSession类的对象,其作用域为整个会话范围。如果需要有session对象的话,需要jsp页面中的page指令的session属性为true。
  3. request和response:对应HttpRequest和HttpResponse类的对象,request的作用域范围为整个请求过程。
  4. pageContext:对应jsp页面的转换单位,其作用域为整个转换单位(出了这个转换单位就不能使用了)。这个对象还可以调用forward和include方法用来实现请求时的页面跳转功能。

其他对象

  1. out:用于向请求体中进行输出。
  2. exception:当页面是异常处理页面时用来获取异常信息。
  3. config:对应ServletContext类对象,用来向servlet中提供一些初始化参数。如果需要提供初始化参数需要在web.xml中配置:在<servlet>标签中使用<jsp-file>子标签指定jsp页面的url和在<init-param>子标签中设置初始化参数的值。
  4. page:这个对象不常用,不做介绍。

4. 包含

包含就是将一个页面包含到当前jsp页面中。根据包含页面是否能动态改变分为静态包含和动态包含。静态包含使用include指令来实现,动态包含使用include行为来实现。

4.1 资源跳转

在servlet中实现资源跳转有重定向和服务器内部转发两种方式。其中服务器内部转发使用RequestDispatcher类对象的forward方法来实现,通过使用这个方法会将请求的控制交给另一个servlet进行处理并最后由其返回处理结果。然而这个类的对象还有一个include方法,其可以将控制权暂时交给另一个页面,并将其输出结果返回给本页面的输出流。

4.2 静态包含

静态包含就是使用include指令来将一个页面的数据和输出包含在这个页面中。格式:<%@include file="包含的页面的url">。静态包含可以简单的看做将另一个页面的所有内容(或者是所有输出内容)都放在这个jsp页面中。通过这个思想可以知道,对于多个被包含的页面,因为最终都是被放到同一个jsp页面中,所以每个页面定义的变量都可以互相使用

静态包含的四个特点:①包含的页面不能使用表达式语句指定(因为在转换时需要包含的语句具有意义,而在转换时表达式不会进行运算,所以没有结果不能赋值给该指令)。②不能向被包含的页面传入参数。③被包含的页面可能不能单独解析。④不同页面之间可以互相调用彼此的变量。

4.3 动态包含

动态包含是通过行为来实现的。其有两种形式:<jsp:include page="包含的页面url">和<jsp:forward page="被包含的页面">两种形式可以分别看做servlet中页面请求服务器内部转发的两种方式。也就是说,动态包含就是服务器内部转发。

使用动态包含时就按上面的服务器内部转发来理解。这时,一旦包含(转发),请求将由不同的servlet实现类来处理,所以包含页面和被包含页面不能互相调用声明的变量,却可以共同使用pageContext、request、session、application对象中的参数(请求作用域中的参数,通过getAttribute方法来获取,setAttribute方法来设置)。

除了通过请求作用域,还可以在包含行为中使用<jsp:param name="" value="">行为来为包含的页面传入数据。在被包含的页面中使用request.getParamter来获取。(这里设置的参数只有在被包含的页面中有效,当被包含的页面执行完毕以后,容器会自动清空数据)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值