JSP及其相关技术

1.JSP注解

<!--   --> html注解,浏览器可见

<%--  -- %> jsp注解,浏览器不可见

2.JSP指令

jsp 指令用来向JSP引擎提供编译信息,所有的jsp指令都只在当前整个页面中有效。jsp指令有3类

(1).page指令称为页面指令,用来定义jsp页面的全局属性,该配置会作用于整个jsp页面。page指令用来指定所使用的脚本语言、导入指定的类及软件包等

page指令共包含13个属性,分别如下:language,extends , import,session , buffer , autoFlush , isThreadSafe , info , ErrorPage , isErrorPage ,

contentType , pageEncoding.

(2).include指令:是文件加载指令,用于在jsp文件中插入一个包含文本或代码的文件,它把文件插入后与原来的jsp文件合并成一个新的jsp文件。如果被插入的文件发生了变化,则包含这个文件的jsp文件需要重新编译。编译之后会生成一个class文件。include指令只有file一个属性,指定被插入文件的位置,一般不使用 " / "开头,而使用相对路径。   被包含的文件可以是 .html文件,txt文档,jsp文件

(3).taglib指令 用来应用标签库并设置标签库的前缀。taglib指令有两个属性,uri属性来制定标签文件或库存放的位置,prefix属性用来指定标签库所使用的前缀

jsp指令使用格式  <%@  指令    属性=“ ”   %>

3.JSP脚本元素

jsp声明语句 <%!  变量或方法定义 %> java变量的声明,变量的类型可以是java语言中所提供的任意数据类型,使用jsp声明语句声明的变量将来会转换成Servlet类中的成员变量,这些变量在整个JSP页面内都有效,因此也被被称为JSP页面的成员变量。其中声明的方法将来也会转换成Servlet类中的成员方法。

jsp表达式  <%= 表达式 %> ,这个表达式必须能够求值,并且计算结果会以字符串形式发送到客户端显示出来。jsp表达式的值会作为HTML页面的内容

JSP Scriptlet是一段java代码。当需要使用java实现一些复杂操作或控制时,jsp表达式往往不能满足要求,此时就需要用到jsp Scriptlet.在jsp Scriptlet中声明的变量是局部变量。

4.JSP动作元素

jsp动过元素用来控制jsp的行为,执行一些常用的jsp页面动作。通过动作元素可以实现使用多行java代码能够实现的效果。如动态插入文件,重用javaBean组件

<jsp:include >动作元素 既可以包含静态文件,也可以包含动态文件,所谓动态包含某个文件,值的是当jsp页面运行时才会载入该文件。如果包含的是jsp文件,则jsp编译器要先执行该文件,再将执行结果发送到客户端并显示出来。而include指令只是简单地将文件内容加入到jsp文件中,从而将两个文件合并成一个,被包含的文件不会被jsp编译器执行。<jsp:include>动过元素包含两个属性:page属性:指定被包含文件的url地址,是一个相对路径。flush属性:指定当缓冲区满时,是否清空。默认值是false。

语法格式:<jsp:inlcue page=" "></jsp:include>

<jsp:forward>动作元素用于页面重定向它的作用是停止当前jsp页面的执行,而将客户端请求交给另一个jsp页面。要注意转发和重定向的区别,转发是在服务器端进行的,不会引起客户端的二次请求,因此浏览器的地址栏不会发生任何变化,效率也比重定向要高。<jsp:forward>动作元素只包含一个page属性,page属性指定文件的URL。

<jsp:forward page=" "></jsp:forward>

<jsp:param>动作元素是一种提供参数的附属动作元素,它以“名-值”对的形式为其他动作元素提供附加信息。一般与<jsp:inlcude><jap:forward>一起使用。

当<jsp:include>与<jsp:param>一起使用时,可以在加载文件的过程中同时向该文件提供信息,再被加载的文件中用request.getParameter("名");的方式获取值。

语法格式<jsp:param  name="参数名字" value="指定给param的参数值"> ,<jsp:include><jsp:param /></jsp:include>

<jsp:param>与<jsp:forward>一起使用时类似

<jsp:plugin>动作元素 可以将服务器端的javaBean或applet下载到客户端执行。属性有很多

<jsp:useBean>动作元素 用来装载一个将在jsp页面中使用的javaBean。

语法格式:<jsp:useBean id=" " class="  " scope=" "> id:指定javaBean的实例名,class:指定javaBean的全限定名,scope:指定引入的javaBean的作用域,默认当前页

<jsp:setProperty>动作元素,获取到Bean实例之后,便可以利用<jsp:setProperty>动作元素来设置或修改Bean中的属性值。

语法格式<jsp:setProperty name=" " property=" " value=" "> name:要进行设置javaBean的实例名,property:要设置的javaBean实例中属性名,value:要设置的属性的值。

<jsp:getProperty>动作元素  用来提取指定Bean属性的值,并将其转换成字符串,然后输出。

语法格式:<jsp:getProperty name=" " property=" "> name:指定要输出的javaBean的实例名。property:指定需要输出的javaBean实例中的属性名。

javaBean类中没有属性也是完全可以的,但必须有操作属性的getter 和 setter 方法。<jsp:setPorperty>和<jsp:getProperty>根本上是通过setter和getter方法来完成赋值和取值操作的。

5.JSP内置对象   为了简化Web应用程序的开发,在JSP中定义了一些有JSP容器实现和管理的内置对象,这些对象可以直接在JSP页面中使用,而不需要jsp页面编写者对它们进行实例化。这九个内置对象都是Servlet API接口的实例

4中属性的作用范围:page , request , session , application

page 范围:指所设置的属性仅在当前页面内有效,使用pageContext的setAttribute()方法可以设置属性,使用pageContext的getAttribute()方法可以获得属性

request 范围:值属性仅在一次请求的范围内有效。

session 范围:指的是属性仅在浏览器与服务器进行一次会话的范围内有效。

application 范围:值属性在整个Web应用中都有效,直到服务器停止后才失效。

 request请求对象 类型                        javax.servlet.ServletRequest                             作用域Request 

 response响应对象类型                     javax.servlet.SrvletResponse                              作用域Page  

pageContext页面上下文对象类型      javax.servlet.jsp.PageContext                             作用域Page   

session会话对象类型                        javax.servlet.http.HttpSession                              作用域Session 

application运用程序对象类型            javax.servlet.ServletContext                                 作用域Application 

 out输出对象类型                              javax.servlet.jsp.JspWriter                                     作用域Page 

 config配置对象类型                         javax.servlet.ServletConfig                                    作用域Page 

 page页面对象类型                           javax.lang.Object                                                    作用域Page  

 exception例外对象类型                   javax.lang.Throwable                                              作用域page

request 对象  :用于获取客户端信息,例如我们在表单中填写的信息等,实际上,JSP容器会将客户端的请求信息封装在request对象中。在客户端发出请求时会创建request对象,在请求之后会销毁request对象。

request 对象中包含的主要方法如下:

Object  getAttribute(String name):获取指定的属性值。 void  setAttribute(String name,Object value):将指定请求参数名设置为 value

String getParameter( String name):获取请求参数名为name的参数值。 Enumeration getParameterNames():获取所有请求参数的名字集合

String [ ] getParameterValues(String name):获得name请求参数的参数值(复选框)。Map getParameterMap():获取所有请求参数名和请求参数值 所组成的Map对象

    void setCharacterEncoding(String encoding):设置编码格式。request.getRequestDispather().forward(request,response):请求转发,地址不变,转发后请求对象会保存

当利用request.getParameter()方法得到 from元素的时候,默认的情况下其字符编码为 ISO-8859-1,有时这种编码不能正确地显示汉子,需要使用request对象的setCharacterEncoding()方法来设置编码格式。可以设置成 utf-8 或 gb-2312

response对象 : 包含了从JSP页面返回客户端的所有信息,其作用域是它所在的页面。response对象时javax.servlet.ServletResponse类的一个实例,它封装由JSP产生的响应,并返回客户端以响应请求。

response对象经常用于设置HTTP标题、添加Cookie、设置响应内容的类型和装填、发送HTTP重定向 和 编码URL

response对象的常用方法如下:

void addCookie(Cookie cookie):添加一个Cookie对象,用于在客户端保存特定的信息。

void addHeader(String name,String value):添加HTTP头信息,该Header信息将被发送到客户端

void containsHeader(String name):用于判断指定名字的HTTP文件头是否存在。

void sendError(int):向客户端发送错误的状态吗

void sendRedirect(String url):重定向JSP文件。

response的一个主要应用是重定向,可通过response的sendRedirect(String url)方法实现重定向。例如当用户输入的表单信息不完整时,就应该再次被引导到该表单的输入页面

。response对象实现的重定向和<jsp:forward>动作元素的最大区别在于<jsp:forward>只能在本网站内跳转,而response。sendRedirect则可以跳转到任何一个地址的页面。

out对象 :  out内置对象是一个缓冲的输出流,用来向客户端返回信息。它是javax.servlet.JspWriter 的一个实例。由于向客户端输出是要先进行连接,所以总是采用缓冲输出的方式,因此out是缓冲输出流。

out对象常用方法如下:

public abstract void clear() 清除缓冲区中的内容,但不把数据输出到客户端。

public abstract void clearBuffer() 清除缓冲区中的内容,同时将数据输出到客户端

void close() 关闭缓冲区并输出缓冲区中的数据          void flush() 输出缓冲区里的数据          int  getBufferSize() 获取缓冲区的大小        int getRemaining()获取剩余缓冲区的大小        boolean isAutoFlush()缓冲区是否进行自动清除         void newLine() 输出一个换行符      void print(String str) 向客户端输出数据   void println(String str)输出并换行

session对象:session对象是会话对象,用来记录每个客户端的访问状态。  所谓会话指的是从一个客户打开浏览器与服务器建立连接,到这个客户关闭浏览器与服务器断开连接的过程。当一个客户访问服务器时,可能会在这个服务器的多个页面之间反复连接,不断刷新一个页面或向一个页面提交信息等,有了session对象,服务器就可以知道这是同一个客户完成的动作。

session 对象的常用方法:

Object getAttribute(String name):获取session范围内name属性的值。

void setAttribute(String name,Object value):设置session范围内name属性的属性值为value,并存储到session中。       

session对象的结构类似于散列表,通过调用setAttribute方法,可以将参数Object指定的对象obj添加到session对象中,并为添加的对象指定一个索引关键字,如果添加的两个对象的关键字相同,则先前的对象被清除(或覆盖)。

void removeAttribute(String name) :删除session范围内name属性

Enumeration getAttributeNames():获取所有session对象中存放的属性名称。

long getCreateTime():返回session被创建的时间

String getId(): 返回session 创建时由JSP容器所设定的唯一标识。

long getLasAccessedTime() 返回用户最后一次通过session发送请求的时间的时间,单位为毫秒

int getMaxInactiveInterval():返回session的失效时间,即两次请求间间隔多长时间该session就被撤销,单位为秒

boolean isNew():判断是否为新的session

void invalidate():清空session的内容

application对象 :session对象用于获取和设置Servlet的相关信息,它的生命周期是从服务器启动到服务器关闭位置。application中封装了JSP所在的Web应用中的信息。

如:application对象下设置属性可以统计当前访问网站的总人数

application对象的常用方法:setAttribute(),getAttribute()

pageContext对象:pageContext对象是一个比较特殊的,使用它不仅可以设置page范围内的属性,还可以其他范围内的属性。通过pageContext 还可以访问本页面中的其他对象,如前面介绍的request,response,out等对象。实际JSP开发过程中pageContext对象并不常用。

page对象

config对象

exception对象:exception对象是java.lang.Throwable类的对象,用来处理页面的错误和异常。在使用JSP进行开发时,习惯的做法是在一个页面中使用page指令的errorPage属性,让该属性指向一个专门用于异常处理的页面。如果在JSP页面中又未捕获的异常,则会生成exception对象,然后将该exception对象传递到page指令中设置的异常处理页面中,在异常处理页面中对exception对象进行处理。 在异常处理页面中需要将其page指令的isErrorPage属性设置为true才可以使用exception对象。

exception对象的常用方法如下:

String getMessage():返回exception对象的异常信息

String getLocalizedMessage():返回本地化语言的异常错误

void printStackTrace():打印异常的栈反向跟踪轨迹

String toString() 返回关于异常的简单描述。

6.JavaBean的使用

JavaBean是用Java语言描述的软件组件模型,在实际开发中常用来封装业务逻辑 和 进行数据库的相关操作,如连接数据库、数据处理等。使用javaBean更好地实现了业务逻辑和表现层之间的分离,降低了它们之间的耦合度。

(1).定义JavaBean ,javaBean 是一个特殊的java类,它具有如下几个语法特征

a. JavaBean 是一个public类,即JavaBean的类访问权限必须是public的

b. JavaBean 包含一个无参的构造方法

c. JavaBean中属性的获取和设置需要使用标准格式定义的 getXxx()方法 和 setXxx()方法。对于boolean类型的成员变量,即布尔类型的属性,可以使用isXxx()方法来代替getXxx()方法 和 setXxx()方法。

(2)设置JavaBean的属性

<jsp:setproperty>动作元素用来设置或修改Bean中的属性值,在JSP中调用它时有如下形式:

a. <jsp:setProperty  name=“myBean” property="*"/>,    property="*"表示从request对象中将所有与JavaBean属性名字相同的请求参数传递给相应属性     的setter方法。myBean是javaBean的实例名

b. <jsp:setProperty name="myBean" property="id" /> ,     该形式表示使用request对象中的一个参数值来设置JavaBean实例中的一个属性值。其中,     property指定了Bean的属性名,该属性名应该和request请求参数的名字保持相同。此处表示将request对象中的参数 id 传入到JavaBean实例myBean中。

c.<jap:setProperty name="myBean" property="id"param="personid"> ,  该形式表示将request对象中的参数 personid 传入到JavaBean 实例 myBean的属性 id 中。其中 param 指定使用哪个请求参数来作为 Bean 属性的值。要说明的是,此时param指定的 Bean 属性和 request参数的名字可以不相同。

d.<jsp:setProperty name="myBean" property="id" value="123" /> ,该形式表示向JavaBean实例 myBean 的属性 id 中传入指定的值。其中 value 用来指定传入 Bean 中属性的值。

  param 属性表示页面请求中的参数的名称,value 属性则表示给Bean属性 property 的具体值。在<jap:setProperty>中不能同时使用param 属性和value属性! 

(3)JavaBean 的存在范围

 在JavaBean中也可以设置其存在范围,它的意义与属性的存储范围相同。page范围:表示每个JavaBean对象只属于当前的JSP页面,只在当前页面中有效。request,session,application 类似。

7.JSP的运行机制

(1)JSP容器先将该JSP文件转换成一个Java源文件

(2)如果转换成功,则JSP容器使用 javac 将生成Java 源文件编译成相应的字节码文件 *.class。该 .class 文件就是一个Servlet,Servlet容器会像处理其他的Servlet 一样来处理它。

(3)由 Servlet 容器加载转换后的 Servlet 类(.class 文件),创建一个该Servlet 的实例,并执行Servlet 的 jspInit()方法,jspInit()方法在 Servlet 的整个生命周期只会被执行一次。

(4)执行 _jspService()方法来处理客户端的请求,对于每一个请求,JSP容器都会创建一个新的线程来处理它。如果有多个客户端同时请求该JSP文件,则JSP容器也会创建多个线程,使得每个客户端请求都对应一个线程。  第(3)步生成的 Servlet的实例是常住内存的,所以响应速度很快。

(5)如果 .jsp 文件被修改了,则服务器根据设置决定是否对改文件重新编译,如果需要重新编译,则使用重新编译后的结果取代内存中常驻的 Servlet ,并继续上述处理过程

(6)虽然 jsp 效率很高,但在第一次调用时往往由于装换 和 编译 过程而产生一些轻微的延迟。此外,由于系统不足等原因,JSP容器会以某种不确定的方式将 Servlet 从内存中移去。这种情况发生时会首先调用 jspDestroy() 方法。

(7)接着 Servlet 实例便被加入“垃圾收集”处理。

(8)当请求处理完成后,响应对象由JSP容器接收,并将 html 格式的响应信息发送回客户端。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值