JSP(java服务器页面)

   35百科网   2020-09-14 00:00:00

jsp全名为java server pages,中文名叫java服务器页面,其根本是一个简化的servlet设计,它[1] 是由sun microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。jsp技术有点类似asp技术,它是在传统的网页html(标准通用标记语言的子集)文件(*.htm,*.html)中插入java程序段(scriptlet)和jsp标记(tag),从而形成jsp文件,后缀名为(*.jsp)。 用jsp开发的web应用是跨平台的,既能在linux下运行,也能在其他操作系统上运行。

它实现了html语法中的java扩展(以 lt;%, %gt;形式)。jsp与servlet一样,是在服务器端执行的。通常返回给客户端的就是一个html文本,因此客户端只要有浏览器就能浏览。

jsp技术使用java编程语言编写类xml的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。jsp将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于web的应用程序的开发变得迅速和容易。 jsp(javaserver pages)是一种动态页面技术,它的主要目的是将表示逻辑从servlet中分离出来。

java servlet是jsp的技术基础,而且大型的web应用程序的开发需要java servlet和jsp配合才能完成。jsp具备了java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。

中文名
爪哇服务器页面
外文名
java server pages
外语缩写
jsp
本质
动态网页技术标准

jsp发展历程

1.2版本

jsp1.2不支持el,但可以使用外部的jstl标签以便使用el。[2]

2.0版本

jsp 2.0的一个主要特点是它支持表达语言(expression language)。jstl表达式语言可以使用标记格式方便地访问jsp的隐含对象和javabeans组件,jstl的核心标记提供了流程和循环控制功能。自制标记也有自定义函数的功能,因此基本上所有scriptlet能实现的功能都可以由jstl替代。在jsp 2.0中,建议尽量使用el而使jsp的格式更一致。

simpletag

jsp 2.0中加入了新的创建自制标记的api,javax.servlet.jsp.tagext.simpletag定义了用来实现简单标记的接口。和 jsp 1.2中的已有接口不同的是,simpletag接口不使用dostarttag和doendtag方法,而提供了一个简单的dotag方法。这个方法在调用该标记时只被使用一次。而需要在一个自制标记中实现的所有逻辑过程、循环和对标记体的评估等都在这个方法中实现。从这个方面来讲, simpletag和iterationtag可以达到同等的作用。但simpletag的方法和处理周期要简单得多。在simpletag中还有用来设置jsp内容的setjspbody和getjspbody方法。web容器会使用setjspbody方法定义一个代表jsp内容的 jspfragment对象。实现simpletag标记的程序可以在dotag方法中根据需要多次调用getjspbody.invoke方法以处理jsp内容。

重要功能

jsp2.0中的一个主要功能是jsp fragment,它的基本特点是可以使处理jsp的容器推迟评估jsp标记属性。我们知道一般jsp是首先评估jsp标记的属性,然后在处理jsp标记时使用这些属性,而jsp fragment提供了动态的属性。也就是说,这些属性在jsp处理其标记体时是可以被改变的。jsp需要将这样的属性定义为 javax.servlet.jsp.tagext.jspfragment类型。当jsp标记设置成这种形式时,这种标记属性实际上的处理方法类似于标记体。在实现标记的程序中,标记属性可以被反复评估多次。这种用法称为jsp fragment。jsp fragment还可以定义在一个simpletag处理程序中使用的自制标记动作。像前面例子说明的,getjspbody返回一个 jspfragment对象并可以在dotag方法中多次使用。需要注意的是,使用jsp fragment的jsp只能有一般的文本和jsp action,不能有scriptlet和scriptlet表达式。[3]

jsp语言标准

句法

一个jsp页面可以被分为以下几部份:

  • 静态数据,如html

  • jsp指令,如include指令

  • jsp脚本元素和变量

  • jsp动作

  • 用户自定义标签

静态数据

静态数据在输入文件中的内容和输出给http响应的内容完全一致。此时,该jsp输入文件会是一个没有内嵌java或动作的html页面。而且,客户端每次请求都会得到相同的响应内容。

jsp指令

jsp指令控制jsp编译器如何去生成servlet,以下是可用的指令:

  • 包含指令include –包含指令通知jsp编译器把另外一个文件完全包含入当前文件中。效果就好像被包含文件的内容直接被粘贴到当前文件中一样。这个功能和c预处理器所提供的很类似。被包含文件的扩展名一般都是jspf(即jspfragment,jsp碎片):

lt;%@ include file=somefile.jsp %gt;

  • 页面指令page –页面指令有以下几个选项:

import

使一个java导入声明被插入到最终页面文件。

contenttype

规定了生成内容的类型。当生成非html内容或者当前字符集character set并非默认字符集时使用。

errorpage

处理http请求时,如果出现异常则显示该错误提示信息页面。

iserrorpage

如果设置为true,则表示当前文件是一个错误提示页面。

isthreadsafe

表示最终生成的servlet是否安全线程(threadsafe)。

lt;%@ page import=java.util.* %gt; //example import导入样例lt;%@ page contenttype=text/html %gt; //example contenttype页面类型样例lt;%@ page iserrorpage=false %gt; //example for non error page无错页面样例lt;%@ page isthreadsafe=true %gt; //example for a thread safe jsp安全线程jsp样例

注意:在同一个jsp文件中只有import导入页面指令可以被多次使用。

  • 标签库指令taglib –标签库指令描述了要使用的jsp标签库。该指令需要指定一个前缀prefix(和c++的命名空间很类似)和标签库的描述uri:

lt;%@ taglib prefix=myprefix uri=taglib/mytag.tld %gt;

jsp脚本

标准脚本变量

以下是永远可用的脚本变量:

  • out – jspwriter用来写入响应流的数据

  • page – servlet自身

  • pagecontext –一个pagecontext实例包括和整个页面相联系的数据,一个给定的html页面可以在多个jsp之间传递。

  • request –http request对象

  • response –http response对象

  • session –用于保持客户端与服务器连接的对象

脚本元素

有三个基本的脚本元素,作用是使java代码可以直接插入servlet.

  • 一种是声明标签,在java servlet的类体中放入一个变量的定义。静态的数据成员也可以如此定义。

    • lt;%! int serverinstancevariable = 1; %gt;

  • 一种是脚本标签,在java servlet的类的_jspservice()方法中放入所包含的语句。

    • lt;% int localstackbasedvariable = 1; out.println(localstackbasedvariable); %gt;

  • 一种是表达式标签,在java servlet的类中放入待赋值的表达式,表达式注意不能以分号结尾。

    • lt;%= expanded inline data + 1 %gt;

jsp动作

jsp动作是一系列可以调用内建于网络服务器中的功能的xml标签。jsp提供了以下动作:

jsp:include

和子过程类似,java servlet暂时接管对其它指定的jsp页的请求和响应。当处理完该jsp页后就马上把控制权交还当前jsp页。这样jsp代码就可以在多个jsp页中共享而不用复制。

jsp:param

可以在jsp:include, jsp:forward或jsp:params块之间使用。指定一个将加入请求的当前参数组中的参数。

jsp:forward

用于处理对另一个jsp或servlet的请求和响应。控制权永远不会交还给当前jsp页。

jsp:plugin

netscape navigator的老版本和internet explorer使用不同的标签以嵌入一个applet。这个动作产生为嵌入一个applet所需要的指定浏览器标签。

jsp:fallback

如果浏览器不支持applets则会显示的内容。

jsp:getproperty

从指定的javabean中获取一个属性值。

jsp:setproperty

在指定的javabean中设置一个属性值。

jsp:usebean

创建或者复用一个javabean变量到jsp页。

技术方法

为了快速方便地进行动态网站的开发,jsp在以下几个方面做了改进,使其成为快速建立跨平台的动态网站的首选方案。

1.将内容的生成和显示进行分离

用jsp技术,web页面开发人员可以使用html或者xml标识来设计和格式化最终页面,并使用jsp标识或者小脚本来生成页面上的动态内容(内容是根据请求变化的,例如请求账户信息或者特定的一瓶酒的价格等)。生成内容的逻辑被封装在标识和javabeans组件中,并且捆绑在脚本中,所有的脚本在服务器端运行。由于核心逻辑被封装在标识和javabeans中,所以web管理人员和页面设计者,能够和使用jsp页面,而不影响内容的生成。

在服务器端,jsp引擎解释jsp标识和脚本,生成所请求的内容(例如,通过访问javabeans组件,使用jdbc技术访问数据库或者包含文件),并且将结果以html(或者xml)页面的形式发送回浏览器。这既有助于作者保护自己的代码,又能保证任何基于html的web浏览器的完全可用性。

可重用组件

绝大多数jsp页面依赖于可重用的、跨平台的组件(javabeans或者enterprise javabeans组件)来执行应用程序所要求的复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者和客户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡。

采用标识

web页面开发人员不会都是熟悉脚本语言的编程人员。jsp技术封装了许多功能,这些功能是在易用的、与jsp相关的xml标识中进行动态内容生成所需要的。标准的jsp标识能够访问和实例化javabeans组件,设置或者检索组件属性,下载applet,以及执行用其他方法更难于编码和耗时的功能。

适应平台

几乎所有平台都支持java,jsp+javabeans几乎可以在所有平台下通行无阻。从一个平台移植到另外一个平台,jsp和javabeans甚至不用重新编译,因为java字节码都是标准的与平台无关的。

数据库连接

java中连接数据库的技术是jdbc,java程序通过jdbc驱动程序与数据库相连,执行查询、提取数据等操作。sun公司还开发了jdbc-odbc bridge,利用此技术java程序可以访问带有odbc驱动程序的数据库,大多数数据库系统都带有odbc驱动程序,所以java程序能访问诸如oracle、sybase、ms sql server和ms access等数据库。

此外,通过开发标识库,jsp技术可以进一步扩展。第三方开发人员和其他人员可以为常用功能创建自己的标识库。这使得web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来进行工作。

jsp技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且能扩展到支持企业级的分布式应用中。作为采用java技术家族的一部分,以及java 2(企业版体系结构)的一个组成部分,jsp技术能够支持高度复杂的基于web的应用。 由于jsp页面的内置脚本语言是基于java的,而且所有的jsp页面都被编译成为java servlets,所以jsp页面具有java技术的所有好处,包括健壮的存储管理和安全性。作为java平台的一部分,jsp拥有java编程语言“一次编写,各处运行”的特点。

语言特点

优点

(1)一次编写,到处运行。除了系统之外,代码不用做任何更改。

(2)系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比asp的局限性jsp的优势是显而易见的。

(3)强大的可伸缩性。从只有一个小的jar文件就可以运行servlet/jsp,到由多台服务器进行集群和负载均衡,到多台application进行事务处理,消息处理,一台服务器到无数台服务器,java显示了一个巨大的生命力。

(4)多样化和功能强大的开发工具支持。这一点与asp很像,java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下。

jsp

(5)支持服务器端组件。web应用需要强大的服务器端组件来支持,开发人员需要利用其他工具设计实现复杂功能的组件供web页面调用,以增强系统性能。jsp可以使用成熟的java beans 组件来实现复杂商务功能。

缺点

(1) 与asp也一样,java的一些优势正是它致命的问题所在。正是由于为了跨平台的功能,为了极度的伸缩能力,所以极大的增加了产品的复杂性。

(2) java的运行速度是用class常驻内存来完成的,所以它在一些情况下所使用的内存比起用户数量来说确实是“最低性能价格比”了。

jsp语言组成

内置对象

request

request 对象是 javax.servlet.httpservletrequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过http协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。

response

response 代表的是对客户端的响应,主要是将jsp容器处理过的对象传回到客户端。response对象也具有作用域,它只在jsp页面内有效。

session

1.什么是session:从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。

2.session对象的id:当一个客户首次访问服务器上的一个jsp页面时,jsp引擎产生一个session对象,同时分配一个string类型的id号,jsp引擎同时将这个id号发送到客户端,存放在cookie中,这样session对象和客户之间就建立了一一对应的关系。当客户再访问连接该服务器的其他页面时,不再分配给客户新的session对象,直到客户关闭浏览器后,服务器端该客户的session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的session对象。

3.session对象存在一定时间过期问题,所以存在session中的名值对会在一定时间后失去,可以通过更改session有效时间来避免这种情况。同时编程时尽量避免将大量有效信息存储在session中,request是一个不错的替代对象。

application

1.什么是application:

服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。

2.application对象常用方法:

(1)public void setattribute(string key,object obj): 将参数object指定的对象obj添加到application对象中,并为添加的对象指定一个索引关键字。

(2)public object getattribute(string key): 获取application对象中含有关键字的对象。

out

out 对象用于在web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

page

page 对象代表jsp本身,只有在jsp页面内才是合法的。 page隐含对象本质上包含当前 servlet接口引用的变量,类似于java编程中的 this 指针。

config

config 对象的主要作用是取得服务器的配置信息。通过 pagecontext对象的 getservletconfig() 方法可以获取一个config对象。当一个servlet 初始化时,容器把某些信息通过 config对象传递给这个 servlet。 开发者可以在web.xml 文件中为应用程序环境中的servlet程序和jsp页面提供初始化参数。

exception

java.lang.throwable 的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page 的iserrorpage 属性为true 时,该对象才可以使用。常用的方法有getmessage()和printstacktrace()等。

pagecontext

pagecontext 对象的作用是取得任何范围的参数,通过它可以获取 jsp页面的out、request、reponse、session、application 等对象。pagecontext对象的创建和初始化都是由容器来完成的,在jsp页面中可以直接使用 pagecontext对象。

jsp开发入门

jsp开发入门2

安装好你的机器来使用jsp

你将会需要java 2软件开发工具(jsdk),它原来的名称是java开发工具(jdk)以及javaserver网站开发工具(jswdk),tomcat,或是其它支持jsp的网络服务器。sun免费提供jsdk与jswdk来供windows,solaris,以及linux平台使用。

如果你想要在你的网络服务器上使用jsp,但服务器本身并不支持jsp与javaservlets,你可以试试看allaire的jrun,它的作用就像是针对netscape企业版与fasttrack服务器、微软的网际网络信息服务器(iis)与个人网络服务器(pws)、apache、以及其它服务器的网络服务器附加设备。你也可以使用apache网络服务器的java版本,最新的jswdk里有提供。

下载与安装你需要的组件

发布的1.2.2-001,jsdk可下载的版本是以可安装的压缩形式。下载的文件大约是20mb,可提供完整的java发展环境,让你能建立利用标准api为核心的java解决之道。然而,你的网络服务器需要应用到jsp的唯一一件事是java编译器。要让网络服务器知道编译器的位置,将环境变量java.home设到jsdk的安装目录。如果你是在windows上安装并且接受预设目录,将这行程序代码set java.home=c:1.2.2加到你的autoexec.bat档案并且重新开机。

在安装好jsdk之后,下载并且安装jswdk或beta版的tomcat,以java为主的apache网络服务器。安装在哪里并不重要,重要的是你可以找到它。一般而言,它会放在上层目录,这种方式可以让你取代jswdk或 jsdk的网络服务器,不需要移动其它的网络服务器。在你安装好这个档案之后,你就可以准备发展jsp了。

在你正确的安装jswdk之后,执行startserver指令文件来激活网络服务器,预设通讯端口 为 8080。要看你在激活服务器之后是均c有正确的安装工具,你可以加载范例jsp档案中的任何一个(http://localhost:8080/examples/jsp/)。如果你能够成功的执行一个范例档案,你可以知道你已经正确的设定好软件了。如果你在激活服务器的控制台窗口看到错误讯息,那么你需要解决这个问题。最常发生的问题是没有设定(或者不正确设定)环境变量java.home。要检视环境设定,在dos模式下键入set。

开始

解释jsp语法之前,先建立一个显示日期与时间的简单网页并且将它储存成sample.jsp:

lt;htmlgt;
lt;headgt;
lt;titlegt;firstpagelt;/titlegt;
lt;/headgt;
lt;bodygt;
lt;h3gt;todayis:
lt;%=newjava.util.date()%gt;
lt;/h3gt;
lt;/bodygt;
lt;/htmlgt;.

将这个档案与你所有的html与jsp网页放在你jswdk安装目录下的网页目录里. 你可以在http://localhost:8080/sample.jsp下载此页.当你第一次参观这个网页时,网站服务器会将jsp翻译成javaservlet程序代码,那你就会看到的日期与时间.。

你已经下载,安装,并且架构好发展环境,你已经准备好要了解jsp语法与建立你自己的jsp为主的解决之道。

jsp开发入门3

jsp语法的基本原理

安装之后,接下来我们要讨论jsp的语法.如果要偷懒,你可以下载语法卡而如果你不熟悉 java的程序设计,你可能会想要参考sun的使用手册;然而,网站建立者不应该做太多的java发展。除了几个函数调用之外,出现在你jsp网页上的java程序代码应该将它减到最少;

记住这点之后,让我们先来看看jsp的编译器指引与指令组件,之后我们将解释javabeans与内部对象. jsp编译器指引与指令组件有五种型态.jsp 1.0之后,大部分的jsp是包含在以lt;% 作为开始%gt;作为结束的单一卷标里.新的 jsp 1.1规格已经发表了,它同时也与xml兼容.

jsp的编译器指引与指令组件

编译器指示 lt;%@ 编译器指示 %gt;

声明 lt;%! 声明 %gt;

表达式 lt;%= 表达式 %gt;

程序代码段/小型指令 lt;% 程序代码片段 %gt;

注释 lt;%-- 注释 --%gt;

编译器指示

jsp的编译器指示是针对jsp引擎。它们并不会直接产生任何看得见的输出;相反的,它们是在告诉引擎如何处理其它的jsp网页。它们永远包含在 lt;%@ %gt;卷标里。两个主要的指引是 page与include。我们不会讨论taglib编译器指引但它可以在jsp1.1里用来建立自订卷标。

你几乎可以在你所有的jsp网页最上面找到page编译器指示。虽然这不是必须的,但它可以让你指定到哪里可以找到支持的java类别这类的事:

lt;%@ page import=java.util.date %gt;,

当发生java问题的事件时应该将讯息传送到哪里:

lt;%@ page errorpage=errorpage.jsp %gt;,

以及你是需要为使用者管理通话期的信息,可能存取多个网页(稍后在javabeans里会有更多通话期的讨论):

lt;%@ page session=true %gt;。

include编译器指示让你将你的内容分成几个可管理的组件,就像那些有表头或脚注的网页。所包含的网页可以是固定格式的html网页或者是jsp内容的网页:

lt;%@ include file=filename.jsp %gt;。

宣告

jsp声明让你定义网页层的变量,来储存信息或定义支持的函式,让jsp网页的其余部分能够使用。如果你发现自己有太多的程序代码,你最好将它们放在不同的java类别里。你可以在 lt;%! %gt;卷标里找到声明。记住要在变量声明的后面加上分号,就跟任何有效的java叙述的形式一样: lt;%! int i=0; %gt;。

表达式

jsp里有表达式,评估表达式的结果可以转换成字符串并且直接使用在输出网页上。jsp运算是属于 lt;%= %gt; 卷标里,并不包含分号,加引号字符串的无用部分。

lt;%= i %gt;

lt;%= hello %gt; 。

程序代码段/小型指令文件

jsp程序代码片段或小型指令文件是包含在lt;% %gt; 卷标里。当网络服务器接受这段请求时,这段java程序代码会执行。小型指令文件可以是原始的html或xml,其内部的程序代码片段可以让你建立有条件的执行程序代码,或者只是一些使用另一块程序代码的东西。举例来说,下列的程序代码结合了表达式与小型指令文件,在h1,h2,h3,以及h4卷标里显示字符串hello。小型指令文件不限于一行的原始程序代码 :

lt;% for (int i=1; ilt;=4; i++) { %gt;

lt;hlt;%=i%gt;gt;hellolt;/hlt;%=i%gt;gt;

lt;% } %gt;。

注释

最后一个主要jsp组件是嵌入式注释。虽然你可以在你的档案里包含html注释,如果使用者检视网页的原始码,他们也会看到这些注释。如果你不要让使用者看到你的批注,你可以将它放在lt;%-- --%gt;卷标里:

lt;%-- 针对服务器端的注释 --%gt;。

jsp开发入门4

jsp与javabean

虽然你可以在小型指令文件里放入一大块的程序代码,但是大多数的java程序代码是属于可以重复使用的组件,称为javabean。javabean就跟activex控件一样:它们提供已知的功能,并且是为了可随时重复使用的目的而设计的。

javabean的价值在于它可以经由一组特性来使用,而这些特性则提供对javabean设定的存取。以人来作范例,此人就是javabean,而他的姓名,社会福利安全号码,以及住址可以是特性。对于jsp网站,基本上你是将#39;javabean#39;动态的连接到你的网站。

假设javabean是在建立网站之前建好的,你要做的第一件事是告诉jsp网页它所需要使用javabean.这工作可以用lt;jsp:usebeangt;卷标来完成:lt;jsp:usebean id=localname class=com.jguru.person scope=application /gt;.

lt;jsp:usebeangt;卷标需要你以id 属性来辨识javabean.在这里,你提供一个名称让jsp网页来辨识javabean,除了id 属性之外,你也必须告诉网页要到哪里去找这个javabean,或者是它的java类别名称。类别属性提供如何在各式方法之中找到它,最后一个需要的组件是scope 属性.有了范围属性的帮助,你可以告诉javabean,要它为单一网页(预设)[scope=page];为一个被请求的网页[scope=request];为通话期[scope=session];或为整个应用程序[scope=application]来维护它自己的信息.对于通话期范围,你可以很容易的维护jsp网页里的项目,例如购物车。

一旦你宣告了javabean之后,你就可以存取它的特性来订定它。要取得一特性的值,使用lt;jsp:getpropertygt;卷标。有了lt;jsp:getpropertygt;卷标,你可以指定要使用的javabean名称(从usebean的id字段),以及你要取得值的特性。接着,真正的值就会放在输出里:lt;jsp:getproperty id=localname property=name /gt;.

要更改javabean的特性,你需要使用lt;jsp:setpropertygt;卷标.对这个卷标,你也需要辨认javabean以及要修正的特性,除此之外,你还需要提供新值.如果命名正确,这些可以直接经由规定的格式取得:lt;jsp:setproperty id=localname property=* /gt;;

要从一参数取得,你必须直接命名此特性以及参数: lt;jsp:setproperty id=localname property=address param=parametername /gt;;

或是直接以名称与值来设定: lt;jsp:setproperty id=localname property=serialnumber value=string /gt; or value= lt;%= expression %gt; /gt;.

有关javabean的最后一点:要让网络服务器可以找到javabean,你需要将它们的类别档案放在特别位置。对jswdk而言,最简单的地方是在安装目录里的类别目录,例如 jswdk-1.0.1classes.

jsp开发入门5

jsp的内部对象

最后一个与jsp语法有关的组件叫做内部对象.在jsp小型指令文件内,你可以存取这些内部对象来与执行jsp网页的servlet环境相互作用。许多对内部对象的存取应该要简化。然而,这些是范例,它们的存取都是可接受的,要完整的利用内部对象设定则需要对最新的java servlet api有所了解。

下表列出你可以使用的内部对象。

内部对象说明

request客户端请求,此请求会包含来自get/post请求的参数

response 网页传回客户端的响应

pagecontext网页的属性是在这里管理

session 与请求有关的会话

applicationservlet正在执行的内容

out 用来传送响应的输出流

config 代码片段配置对象

page jsp网页本身

exception 针对错误网页,未捕捉的例外

那么,这些是做什么的,而你应该如何使用它们呢基本上,在你的小型指令文件里,你可以使用它们来存取执行jsp程序代码的servlet。为了避免谈论到太多servlet api 的细节,让我们来检视一些你可以利用它们来做的事:

不必使用表达式,你可以直接存取内部out对象来打印一些东西到response:

lt;% out.println(hello); %gt;.

不必直接传送参数到javabean,你可以藉由请求对象来取得参数的值:

lt;% string name=request.getparameter(name); out.println(name); %gt;。

当你以jsp写了许多的应用程序之后,如果你建立了javabeans或者发现你自己将太多的java原始码放入你的jsp档案,你需要建立支持的java类别,这样可以鼓励重复使用并且降低jsp网页转换时所需要的时间。当你需要建立java类别时,你必须:

将jdswk的安装目录in目录加到你的path。在你的autoexec.bat档案的path行的最后,加入c:1.2.2in; 。

以下面的指令将jar档案复制到jrelibext目录:

copy c:jswdk-1.0.1libservlet.jar c:jdk1.2.2jrelibext.

jsp语言对比

与servlets的区别

从架构上说,jsp可以被看作是从servlets高级提炼而作为java servlet2.1 api的扩展而应用。servlets和jsp最早都是由sun microsystems(升阳公司)开发的。从jsp1.2版本以来,jsp处于java community process(有人译为:java社区组织)开发模式下。jsr-53规定了jsp 1.2和servlet 2.4的规范,jsr-152规定了jsp 2.0的规范。2006年5月,jsp 2.1的规范作为java ee5的一部份,在jsr-245中发布。

与asp的比较

jsp(java server page)与asp(active server page)两者都是常用的动态网页技术,也都是可以嵌入html中的程序,但两者是有着本质的不同,主要从以下几个方面对其进行比较:

1.web服务器的支持:大多数通用的 web服务器如:apache、netscape和microsoft iis都支持jsp页面,只有微软本身的microsoft iis和personal web server可以支持asp。

2.平台的支持:jsp具有平台独立性,只要是一般的java程序可以运行的平台,都支持jsp程序。windows平台可以很好的支持asp,但asp对于基于win32逐渐模型的依赖,使得它难于移植到其它平台上。

3.组件模型:jsp是建立在可重用的、跨平台的组件(如:javabeans、enterprises javabeans和用户定制的标签库等组件)之上的,而asp使用的是基于win32的com组件模型。

4.脚本语言:jsp可以使用java编程语言或javascript作为脚本语言,而asp使用vbscript或jscript作为脚本语言。

5.安全性:jsp使用java安全模型,而asp使用windows nt的安全结构。

6.与access数据库的连接:jsp使用jdbc建立与access数据库的连接,而asp对access数据库使用data active objects。

7.用户定制的标签:jsp可以使用用户定制标签库进行扩充,而asp中没有用户定制标签库,asp是不能扩充的。

jsp常见问题

1、如何显示目录列表:

我们在本机测试程序时,一般都习惯在浏览器中就能遍历到某个目录下都有哪些文件,这就需要web服务器支持目录列表:

打开文件conf/web.xml,找到以下代码:

lt;param-namegt;listingslt;/param-namegt;
lt;param-valuegt;falselt;/param-valuegt;

将其中的false改成true

2、配置error-page:(指定处理错误的页面)

打开文件d:\demo\web-inf\web.xml:

在lt;web-appgt;…lt;/web-appgt;中间加入:

lt;error-pagegt;
lt;error-codegt;404lt;/error-codegt;
lt;locationgt;/notfound.jsplt;/locationgt;
lt;/error-pagegt;

(错误代码为404的错误导向到notfound.jsp)

lt;error-pagegt;
lt;error-codegt;500lt;/error-codegt;
lt;locationgt;/error.jsplt;/locationgt;
lt;/error-pagegt;

(当系统发生500错误即服务器内部错误时,跳转到错误处理页面error.jsp)

lt;error-pagegt;
lt;exception-typegt;java.lang.nullexceptionlt;/exception-typegt;
lt;locationgt;/error.jsplt;/locationgt;
lt;/error-pagegt;

(当系统发生java.lang.nullexception(即空指针异常)时,跳转到错误处理页面error.jsp)

提醒:

以上页面都需要做大一点(gt;=2kb),否则不起作用。

原因:tomcat把这样的页面字节限制在不少于多少字节。

3、jsp页面出现乱码如何解决?

在页头加上:

lt;%@pagecontenttype=“text/
html
;charset=gb2312″%gt;

4、jsp中两种包含页面的方式?

第一种:动作标签;例如:

lt;jsp:includepage=/index.html/gt;

第二种:指令标签;例如:

lt;%@includefile=relativeurl%gt;

jspjsp标准标签库

根据jstl标签所提供的功能,可以将其分为5个类别。

  • 核心标签

  • 格式化标签

  • sql 标签

  • xml 标签

  • jstl 函数

jstl 库安装

apache tomcat安装jstl 库步骤如下:

  • 从apache的标准标签库中下载的二进包(jakarta-taglibs-standard-current.zip)。下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

  • 下载jakarta-taglibs-standard-1.1.1.zip 包并解压,将jakarta-taglibs-standard-1.1.1/lib/下的两个jar文件:standard.jar和jstl.jar文件拷贝到/web-inf/lib/下。

使用任何库,你必须在每个jsp文件中的头部包含lt;taglibgt;标签。

核心标签

核心标签是最常用的jstl标签。引用核心标签库的语法如下:

lt;%@ taglib prefix=c uri=http://java.sun.com/jsp/jstl/core %gt;

标签

描述

lt;c:out gt;

用于在jsp中显示数据,就像lt;%= ... gt;

lt;c:set gt;

用于保存数据

lt;c:remove gt;

用于删除数据

lt;c:catchgt;

用来处理产生错误的异常状况,并且将错误信息储存起来

lt;c:ifgt;

与我们在一般程序中用的if一样

lt;c:choosegt;

本身只当做lt;c:whengt;和lt;c:otherwisegt;的父标签

lt;c:whengt;

lt;c:choosegt;的子标签,用来判断条件是否成立

lt;c:otherwise gt;

lt;c:choosegt;的子标签,接在lt;c:whengt;标签后,当lt;c:whengt;标签判断为false时被执行

lt;c:importgt;

检索一个绝对或相对 url,然后将其内容暴露给页面

lt;c:foreach gt;

基础迭代标签,接受多种集合类型

lt;c:fortokensgt;

根据指定的分隔符来分隔内容并迭代输出

lt;c:paramgt;

用来给包含或重定向的页面传递参数

lt;c:redirect gt;

重定向至一个新的url.

lt;c:urlgt;

使用可选的查询参数来创造一个url

格式化标签

jstl格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:

lt;%@ taglib prefix=fmt uri=http://java.sun.com/jsp/jstl/fmt %gt;

标签

描述

lt;fmt:formatnumbergt;

使用指定的格式或精度格式化数字

lt;fmt:parsenumbergt;

解析一个代表着数字,货币或百分比的字符串

lt;fmt:formatdategt;

使用指定的风格或模式格式化日期和时间

lt;fmt:parsedategt;

解析一个代表着日期或时间的字符串

lt;fmt:bundlegt;

绑定资源

lt;fmt:setlocalegt;

指定地区

lt;fmt:setbundlegt;

绑定资源

lt;fmt:timezonegt;

指定时区

lt;fmt:settimezonegt;

指定时区

lt;fmt:messagegt;

显示资源配置文件信息

lt;fmt:requestencodinggt;

设置request的字符编码

sql标签

jstl sql标签库提供了与关系型数据库(oracle,mysql,sql server等等)进行交互的标签。引用sql标签库的语法如下:

lt;%@ taglib prefix=sql uri=http://java.sun.com/jsp/jstl/sql %gt;

标签

描述

lt;sql:setdatasourcegt;

指定数据源

lt;sql:querygt;

运行sql查询语句

lt;sql:updategt;

运行sql更新语句

lt;sql:paramgt;

将sql语句中的参数设为指定值

lt;sql:dateparamgt;

将sql语句中的日期参数设为指定的java.util.date 对象值

lt;sql:transaction gt;

在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行

xml 标签

jstl xml标签库提供了创建和操作xml文档的标签。引用xml标签库的语法如下:

lt;%@ taglib prefix=x uri=http://java.sun.com/jsp/jstl/xml %gt;

在使用xml标签前,你必须将xml 和 xpath 的相关包拷贝至你的lt;tomcat 安装目录gt;\lib下:

  • xercesimpl.jar:

  • xalan.jar:

  • 标签

描述

lt;x:outgt;

与lt;%= ... gt;,类似,不过只用于xpath表达式

lt;x:parsegt;

解析 xml 数据

lt;x:set gt;

设置xpath表达式

lt;x:if gt;

判断xpath表达式,若为真,则执行本体中的内容,否则跳过本体

lt;x:foreachgt;

迭代xml文档中的节点

lt;x:choosegt;

lt;x:whengt;和lt;x:otherwisegt;的父标签

lt;x:when gt;

lt;x:choosegt;的子标签,用来进行条件判断

lt;x:otherwise gt;

lt;x:choosegt;的子标签,当lt;x:whengt;判断为false时被执行

lt;x:transform gt;

将xsl转换应用在xml文档中

lt;x:param gt;

与lt;x:transformgt;共同使用,用于设置xsl样式表

jstl函数

jstl包含一系列标准函数,大部分是通用的字符串处理函数。引用jstl函数库的语法如下:

lt;%@ taglib prefix=fn uri=http://java.sun.com/jsp/jstl/functions %gt;

函数

描述

fn:contains()

测试输入的字符串是否包含指定的子串

fn:containsignorecase()

测试输入的字符串是否包含指定的子串,大小写不敏感

fn:endswith()

测试输入的字符串是否以指定的后缀结尾

fn:escapexml()

跳过可以作为xml标记的字符

fn:indexof()

返回指定字符串在输入字符串中出现的位置

fn:join()

将数组中的元素合成一个字符串然后输出

fn:length()

返回字符串长度

fn:replace()

将输入字符串中指定的位置替换为指定的字符串然后返回

fn:split()

将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回

fn:startswith()

测试输入字符串是否以指定的前缀开始

fn:substring()

返回字符串的子集

fn:substringafter()

返回字符串在指定子串之后的子集

fn:substringbefore()

返回字符串在指定子串之前的子集

fn:tolowercase()

将字符串中的字符转为小写

fn:touppercase()

将字符串中的字符转为大写

fn:trim()

移除首位的空白符

该篇内容就是由35百科网(原文链接:https://www.555baike.com/9999/2761.html)小编为各位整理

标签:服务器页面



分享:

  • 微信
  • QQ好友
  • QQ空间
  • 新浪微博


热门推荐

解领格

附注:鸳肩,取鸳鸯交颈之义定名·‘时’别解作‘时候’,不作‘九点’解。 中文名称 解领格 ...

大宽喙象

大宽喙象是漂亮的珍稀象甲。体长24-30毫米,体宽4.5-6毫米。分布于中国云南省。 中文学名 ...

音像

音像是汉语词汇,拼音yīn xìang,解释为录音和录像。 中文名 音像 拼音 yīn x ...

国际会计师联合会

国际会计师联合会(international federation of accountants,ifa ...

李惠堂

本词条由“科普中国”百科科学词条编写与应用工作项目 审核 。 李惠堂,中国近代体育史上著名的足球运 ...

虾须格

古代谜语的格名,虾须、鸦髻、丫髻,都取形似而立格名。 中文名 虾须格 别名 丫髻、鸦髻 ...

永嘉四灵

中国南宋中叶的诗歌流派,代表南宋后期诗歌创作上的一种倾向。永嘉四灵是当时生长于浙江永嘉(今浙江温州)的四 ...

曹娥格

曹娥格是猜谜语中最常见的谜格之一,别名:碑阴格。格名最早出现在《韵鹤轩笔谈》,书中云:“灯谜有十八格,曹 ...

凤凰涅槃(汉语词语)

同义词 凤凰涅磐一般指凤凰涅槃(汉语词语) 凤凰涅槃(phoenix nirvana)是天方国的传说 ...

魔力宝贝(2002年日本ENIX公司开发的PC端MMORPG游戏)

《魔力宝贝》是一款由enix公司开发的q版回合制角色扮演类电脑客户端游戏,于2002年1月16日于中国发 ...

五官(人体器官)

人们常说的“五官”,指的就是“眼、耳、鼻、舌、口”五种人体器官。而人们说的五官在中医与西医、字典中说得五 ...

辽沈战役(解放战争三大战役之一)

辽沈战役是中国近代史中第二次国共内战的“三大战役”之一,1948年9月12日开始,同年11月2日结束,共 ...

明朝(中国历史朝代)

明朝(1368-1644年[1] )是中国历史上最后一个由汉族建立的大一统中原王朝,共传十二世,历十六帝 ...

温暖(许巍演唱歌曲)

《温暖》出自2000年1月发行的专辑《那一年》,后来又收录在2005年3月5日发行的《珍藏许巍1995- ...

交友

交友是人们为了摆脱自己单身的生活,而去结交认识他人的过程。交友的类型可以是女朋友或者男朋友,也可以是普通 ...

盱眙县

同义词 盱眙(江苏省淮安市下辖县)一般指盱眙县 声明 2015年盱眙县入选中国最具投资潜力中小 ...

海岸线(大海和地面的交界线)

海岸线是海洋与陆地的分界线,它的更确切的定义是海水向陆到达的极限位置的连线。由于受到潮汐作用以及风暴潮等 ...

澧县

声明 澧县先后被定为全国商品粮基地县、优质棉基地县和产棉大县。有国家级文物保护单位13处,以城头山 ...

杰尼斯事务所

同义词 johnnys一般指杰尼斯事务所 杰尼斯事务所[1] (johnnys事务所,港译尊尼事务所 ...

艾迪逊·阿兰蒂斯·德·纳西曼托

同义词 球王贝利一般指艾迪逊·阿兰蒂斯·德·纳西曼托 贝利(1940年10月23日——),出生在巴西 ...