JSP技术



JSP简介

JSP(Java Server Page)是基于Java Servlet和整个Java体系的Web服务器端开发技术。用于在网页上显示动态内容,在HTML中加入Java程序片段或JSP标记就可以构成JSP网页。JSP页面文件以.jsp为扩展名保存。

JSP的的执行流程:第一个用户请求JSP文件的时候,JSP容器(Tomcat等)把JSP文件转换成Java文件(Servlet类),然后编译成class文件,常驻内存;当有客户请求时,直接再打开一个线程,而不是一个进程,无须重新编译,直接执行第一次已经编译好的class文件,速度比每次都要重新编译JSP文件快很多。如果JSP文件发生变换则需要重新编译一次。


JSP语法

1、简单的JSP程序

将程序发布到服务器,去测试

2、JSP注释与声明

(1)HTML注释:在标记符号<!--和-->之间加入注释内容,如:<!--这是HTML注释-->

JSP引擎把HTML注释交给客户,因此客户通过浏览器查看JSP页面源文件时,可以看到HTML注释。

(2)JSP注释:在标记符号<%--和--%>之间加入注释内容,如<%--这个注释在客户端是不可见的--%>

JSP引擎忽略JSP注释

(3)声明:JSP声明使用户可以定义网页层的变量来存储信息,如:定义方法和变量,以便于在JSP页面的其它部分能够使用这些定义过的变量或方法。

语法格式:<%! 变量或方法 %>,如下面代码

在JSP中声明的变量,相当于static变量,如果没有赋初值,其初值默认为0

3、JSP表达式和程序段

JSP表达式就是一个符合Java语法的表达式,JSP表达式直接把表达式的值作为字符串输出。

格式:<%=表达式%>

JSP程序段是包含在<%和%>标记之间的有效Java程序段。它是JSP程序的主要逻辑块。

格式:<%Java代码%>

例:计算1到10的累加和

发布后,去测试

4、JSP与HTML的混合使用

在JSP页面中,既有HTML代码又有Java代码,它们分工协作各负其责。HTML代码主要是用于页面外观的组织与显示,如显示字体的大小、颜色、定义表格、是否换行、显示图片、插入链接等。JSP代码主要用于业务逻辑的处理,如对数值的计算、数据库的操作等,也可用Java代码控制HTML的显示,这可以通过将HTML嵌入到Java的循环和选择语句中来实现。

例:在页面上由小到大显示字符串“WELCOME”

测试



JSP编译指令

JSP编译指令是给JSP引擎提供编译器指令信息的,其作用是设置JSP程序和由该JSP程序编译所生成的Servlet程序的属性。

指令格式:<%@ 指令名 属性="值" %>

1、include指令

JSP页面可通过include指令将其它文件包含到当前页面中。包含的文件可以是JSP文件、HTML文件、文本文件。

格式:<%@ include file="relativeURL" %>

include指令告诉Java编译器在编译当前的JSP程序时,将由字符串relativeURL所指定的外部文件代码插入到include编译指令所在的位置,并把它作为当前JSP程序的一个部分编译。如果被嵌入的JSP代码发生了变化,那么当这个JSP程序下次被请求时将会被重新编译。

作用:在一个web应用中,当多个JSP页面包含相同内容时,可以把相同的部分放在一个JSP文件中,然后在其他的文件中用include指令包含这个JSP文件即可。这样做的好处是当需要修改的时候,只需要修改一个JSP文件,其他包含该文件的JSP文件会同时修改。

示例:通过include指令将one.jsp嵌入到two.jsp中

发布后,去测试

2、page指令

主要用于定义作用于当前JSP页面的属性。包括指定脚本语言的种类、导入的包或类、指定页面编码的字符集等。

格式:

language:设置当前页面中编写JSP脚本使用的语言。目前仅Java为有效值和默认值

import:导入Java包名或类列表,可以在同一个文件中导入多个不同的包或类,用逗号分隔

session:指定JSP页面是否使用session,默认取值true

buffer:指定服务器向客户端发送JSP文件时使用的缓冲区大小,默认为8KB

isThreadSafe:声明JSP引擎执行这个JSP程序的方式。默认值是true,JSP引擎会启动多个线程来响应多个用户的请求。若是false,则只启动一个线程来响应请求。

errorPage:指定本JSP程序发生错误时要转向的显示错误信息页面

contentType:设置传回网页的文件格式和编码方式,即设置MIME类型,默认MIME类型是text/html,默认的字符编码是ISO-8859-1

isErrorPage:指定本JSP文件是否用于显示错误信息的页面

pageEncoding:指定本页面编码的字符集,默认为ISO-8859-1

isELIgnored:设置是否忽略EL表达式,为true时表示忽略EL表达式

3、taglib指令

taglib可以在页面中使用基本标记或自定义标记来完成指定的功能。

格式:<%@ taglib uri="taglibURI" prefix="tagPrefix" %>

uri:唯一指定标记库的绝对URI或相对URI,URI用于定位这个标记库资源的位置

prefix:标记库的识别符,用以区别用户的自定义动作。


JSP动作

JSP动作是一组动态执行的指令,它和JSP编译指令是有区别的。包含JSP动作的页面,每次被客户端请求时都会被重新执行一次;而在JSP页面中的编译指令是在编译期即被JSP引擎编译执行。常用的JSP动作:

1、forward动作

作用:从该指令处停止当前页面的执行,而转向执行page属性指定的JSP页面。

格式:

不需要传递传输:<jsp:forward page="要转向的页面">

需要传递参数时:

<jsp:forward page="要转向的页面">

param子标记

</jsp:forward>

page属性:该属性指定了要转发的目标文件的路径。如路径以/开头,表示是在当前应用的根目录下查找文件,否则就在当前文件所在路径下查找要转发的文件。

<jsp:forward>动作从当前页面转发到另一个页面时,实际完成了一次请求,因此在转发过程中request对象是有效的。

例:利用<jsp:forward>和<jsp:param>实现页面转发过程中传递参数

发布后,去测试

2、include动作

作用:用于在JSP中包含一个静态或动态文件。

格式:<jsp:include page="relativeURL" flush="true|false" />

page属性:指定要包含文件的相对路径或绝对路径

flush属性:指定是否将被包含的文件的执行结果输出到客户端,默认为true

3、useBean动作

作用:<jsp:useBean>动作用于在JSP页面中实例化一个或多个JavaBean组件,这些被实例化的JavaBean对象可以在JSP中被调用。

格式:<jsp:useBean id="name" class="classname" scope="page|request|session|application" />

id属性:声明所创建的JavaBean实例对象的名称,在页面中可以通过id的值来引用JavaBean对象。

class属性:指定JavaBean的完整路径和类名。

scope属性:指定实例对象的生命周期,可以是page、request、session、application。

<jsp:useBean>常和<jsp:setProperty>及<jsp:getProperty>动作一起配合使用。

<jsp:setProperty>可以对JSP页面中的Bean对象的属性赋值;<jsp:getProperty>则可以取出Bean对象属性中的值并显示出来。

例:已知一个图书类Book,在test-usebean.jsp页面中用<jsp:useBean>创建Book的实例,并通过<jsp:setProperty>为其属性赋值,利用<jsp:getProperty>将值显示出来。

发布后,去测试


JSP隐含对象

在JSP内部已经定义好了一些内部对象,可以直接使用这些对象及其方法和属性来实现一些业务逻辑。

1、输出对象out

作用:向客户端输出各种格式的数据,其父类是javax.servlet.jsp.JspWrite。

主要方法:输出换行out.println(DataType)和不输出换行out.print(DataType),DateType表示数据类型。

2、请求对象request

客户端每次向JSP服务器发送请求时,JSP引擎都会创建一个request对象代表该请求,每请求一次会有一个request对象与之对应。在request对象对象中封装了客户端的相关信息,如:HTTP头和消息体。在客户端对服务器发送请求时,允许带有参数,请求的参数也是请求的组成部分,他们作为字符串从客户端传送到servlet容器中。

request对象常用方法:

getAttribute(String name):返回参数name所指定的属性值

getCookies():返回客户端的Cookie对象数组

getHeader(String name):返回指定名字的HTTP Header的值

getParameter(String name):获取客户端传送给服务器的参数值

getParameterNames():获取客户端传送给服务器的参数名

getParameterValues(String name):获取客户端向服务器传递的指定参数的所有值

getRequestURI():获取客户端通过浏览器所请求的URI地址

getRemoteAddr():获取客户端的ip地址

getServletPath():获取客户端所请求的服务器端程序的路径

getServerPort():获取客户端所请求的服务器的HTTP的端口号

setAttribute(String name,Object o):将一个对象以指定的名字保存在request中

例:仿注册页面test-register.jsp提交数据,show.jsp应用request对象获取数据并输出。

发布后,去测试

3、响应对象response

response对象是服务器对request对象请求的回应,负责向客户端发送数据。通过调用response对象的方法可以获得服务器端的相关信息,如状态行、头和信息体等。

常用方法:

setContentType(String type):设置发送文档的MIME类型

setHeader(String name,String value):设置头中指定属性的值

sendRedirect(String url):重定向到指定的URL

setStatus(int state):设置返回的状态码

4、会话对象session

定义:是从一个客户打开浏览器连接到服务的某个服务开始,到关闭浏览器离开该服务称为一个会话。

作用:对访问服务器某服务的用户进行跟踪。

session的生命周期:整个会话期间有效。

销毁session对象:(1)关闭访问该服务的客户端浏览器,(2)到达session的最大生存周期,(3)调用session的innvalidate()方法主动销毁。

session对象是javax.servlet.http.HttpSession接口的实例对象。因此session对象的方法其实就是HttpSession接口的方法,其常用方法主要有:

int getMaxInactiveInterval():返回会话的最大生存时间,单位为秒

void setMaxInactiveInterval(int interval):设置会话的最大生存时间,单位为秒

long getCreationTime():返回会话创建的时间

long getLastAccessedTime():返回最后一次访问会话的时间

void invalidate():使session对象失效

boolean isNew():判断是否是新会话

String getId():返回服务端生成的唯一标识

void setAttribute(String key,Object value):将一个Object对象以key为关键字保存到session中

Object getAttribute(String key):返回以key为关键字的Object对象

void removeAttribute(String key):从session对象中删除以key为关键字的属性

例:应用session对象中的setAttribute()和getAttribute()方法实现仿用户登录,其中login.jsp用于输入用户登录信息,login-result.jsp用于显示登录信息

发布后,去测试

5、application对象

application对象是在Web服务器启动时由服务器自动创建的,因此可将application对象看做是Web服务器中的全局变量。其生命周期是所有JSP隐含对象中最长的,只有当Web服务器关闭时才销毁该对象。利用该特性,可以将要在多个用户中共享的数据放在application对象中,如在线人数的统计,实现聊天室等。

application对象是javax.servlet.ServletContext接口的实例对象,它具有所有ServletContext接口的方法。常用方法有:setAttribute()和getAttribute()

例:利用application对象实现网站计数

测试