Servlet&JSP 第六章 使用JSP

本文详细介绍了Servlet和JSP之间的关系,包括JSP的生命周期、Servlet到JSP的转换、JSP的指令元素、声明、Scriptlet、表达式元素、注释元素以及隐式对象。此外,还探讨了JSP中的错误处理。在标准标签部分,讲解了<jsp:include>、<jsp:forward>等标签的用法,以及如何使用<jsp:useBean>、<jsp:setProperty>和<jsp:getProperty>操作JavaBean。最后,文章讨论了表达式语言(EL)的基础,包括EL的属性获取、运算符和自定义函数。
摘要由CSDN通过智能技术生成

一、从JSP到Servlet

1、JSP生命周期

1)JSP最后会被容器转译为Servlet源代码、自动编译为.class文件、载入.class文件,然后生成Servlet对象,所以第一次请求JSP页面会慢许多才得到响应。

2)JSP在转译为Servlet并载入容器生成对象后,会调用_jspInit()方法进行初始化操作,而销毁前则是调用_jspDestroy()方法进行善后操作,在Servlet中,每个请求到来时,容器会调用service()方法,而在JSP转译为Servlet后,请求的到来则是调用_jspService()方法。当请求到来而容器调用service()方法时,其中又调用了_jspService()方法,也因此在JSP转译为Service的源代码中,会看到所定义的代码是转译在_jspService()方法中。

3)转译后的Servlet会重新定义_jspInit()、_jspDestroy(),如果想要在JSP网页载入执行时做些初始化操作,则可以重新定义jspInit()方法,如果想要做一些收尾操作,则可以重新定义jspDestroy()方法。

2、Servlet至JSP的简单转换

JSP会转换为Servlet,Servlet可实现的功能也可以用JSP实现,通常JSP会作为画面显示用。

(1)每个JSP中的元素,都可以对照至Servlet中某个元素或代码,如指示元素、隐式元素、Scriptlet元素、操作数元素等,斗鱼Servlet有实际的对应。

(2)使用JSP处理画面不必使用“”包括字符串来做HTML的输出。

(3)可直接用Scriptlet元素,也就是使<%与%>包括要编写的Java代码。

3、指示元素

(1)JSP指示元素的主要目的,在于指示容器将JSP转译为Servlet源代码时,一些必须遵守的信息,指示元素的语法如下:

<%& 指示类型 [属性=“值”]* %>

(2)在JSP中有三种常用的指示类型:page、include与taglib。

page指示类型告知容器如何转译目前的JSP网页。

page指示类型的import属性告知容器转译JSP时,必须在源代码中包括的import陈述。也可以在同一个import属性中,使用逗号分隔数个import的内容。可以在使用page指示类型时一行一行编写,也可以编写在同一个元素中。

例1、<%@ page import=”java.util.Data” %>

page指示类型的contentType属性告知容器转译JSP时,必须使用HttpServletRequest的setContentType()方法,调用方法时传入的参数就是contentType的属性值。

page指示元素的pageEncoding属性告知这个JSP网页中的文字编码,以及内容类型附加的charset设置。如果网页中包括得ASCII编码范围中的字符,就要指定正确的编码格式,才不会出现乱码。

例2、<%@page contentType=”text/html” pageEncoding=”UTF-8” %>

page指示类型的其他属性:

Info属性:用于设置目前JSP页面的基本信息,这个基本信息最后会转换为Servlet程序中使用getServletInfo()所取得的信息。

autoFlush属性:用于设置输出串流是否要自动清除,默认是true,如果设置为false,而缓冲区满了却没有调用flush()将数据送出至客户端,则会产生异常。

buffer属性:用于设置至客户端的输出串流缓冲区的大小,设置时必须指定单位,例如buffer=“16kb”。默认是8kb。

errorPage属性:用于设置当JSP页面执行错误而产生异常时,该转发哪一个页面处理这个异常。

extends属性:用来指定JSP网页转译为Servlet程序之后,该继承哪一个类。

isErrorPage属性:设置JSP页面是否为处理异常的页面,这个属性要与errorPage属性配合使用。

language属性:指定容器使用哪种语言的语法来转译JSP网页。

session属性:设置是否在转译后的Servlet源代码中具有创建HttpSession对象的语句,默认是true,若某些页面不需做进程跟踪,设成false可增加一些效能。

isELIgnored属性:设置JSP网页中是否忽略表达式语言,默认是false,如果设为true,则不转译表达式语言,这个设置会覆盖web.xml中的<el-ignored>设置。

isThreadSafe属性:告知容器编写JSP网页时是否注意到线程安全,默认值是true,如果设置为false,则转译之后的Servlet会实现SingleThreadModel接口,每次请求时将创建一个Servlet实例来服务请求,不建议设置为false。

include指示类型告知容器将别的JSP页面包括进来进行转译。会在转译时期就决定转译后的Servlet内容,是一种静态的包括方式。

例3、将header.jspf与foot.jspf的内容包括进来做转译:
<%&include file=”/WEB-INF/jspf/header.jspf” %>
<%&include file=”/WEB-INF/jspf/foot.jspf” %>

taglib指示类型告知容器如何转译这个页面中的标签库。

(3)指示元素中可以有多对属性/值,必要时,同一个指示类型可以用数个指示元素来设置。

4、声明、Scriptlet与表达式元素

JSP网页最后会转译为Servlet类,转译后的Servlet类应该包括哪些类成员,方法声明或哪些语句,可以使用声明元素、Scriptlet元素及表达式元素来指定。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值