第5讲 构建Web应用技术(服务器端技术)_第1页
第5讲 构建Web应用技术(服务器端技术)_第2页
第5讲 构建Web应用技术(服务器端技术)_第3页
第5讲 构建Web应用技术(服务器端技术)_第4页
第5讲 构建Web应用技术(服务器端技术)_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

构建Web应用技术

-服务器端技术服务器端逻辑体系结构B/S交互动作:浏览器的每一个动作都产生一个对服务器的请求,服务器处理这个请求计算结果,生成一个新的页面发送到客户端。优点:客户端初次启动快、对客户端资源要求低。支持的技术:服务器端技术,如JSPJavaServlet、ASP等。服务器端技术发展静态-->动态

SSI(ServerSideIncludes)1993年,CGI1.0发布。1994年,发明PHP1996年

,ASP技术引入

1997年,Servlet技术问世1998年,JSP技术诞生服务器端技术概况目前在服务器端生成动态页面的技术有:公共网关接口服务器端脚本技术服务器端插件技术(API)Servlet技术JSP技术中间件技术最早的服务器端网页生成技术-SSI

SSI通常称为服务器端嵌入,是一种基于服务器的网页制作技术;在以.shtml为扩展名的SSI文件中,包含标准的HTML编码和SSI指令;标准的HTML编码会被直接送到浏览器上,而内嵌的SSI命令则先被网络服务器解释执行,输出信息也将作为标准的HTML而被送至浏览器。最早的服务器端网页生成技术-SSI

<html>

<head><title>SSIexample</title></head>

<body>

<h2>新闻

</h2>

<P><!--#includefile="news.txt"-->

<p>新闻更新日期:

<!--#flastmodfile="news.txt"-->

</body></html>

*功能非常有限CGI概述

CGI(CommonGatewayInterface):通用网关接口是第一种真正使服务器能根据运行时的具体情况,动态生成HTML页面的技术。通过CGI接口,Web服务器能够执行CGI应用程序,接收用户的输入,并将应用程序的输出,如文字、图形、声音等传递给一个Web浏览器。CGI程序语言:C、Shell、Perl和VisualBasic等。CGI概述

CGI程序在UNIX系统中放在cgi-bin子目录下,在Windows系统中放在cgi-win子目录下。CGI程序两种调用方式:

(1)URL调用:

/cgi-win/cgi.exe

(2)HTML里的Form调用,处理表单。CGI工作流程:获取HTTP请求信息;执行CGI程序;生成HTML文件返回浏览器。CGI工作原理

Unix平台下,Web服务器与CGI程序通过输入流scanf获得用户输入、输出流printf生成输出结果;Windows平台下通过文件系统来实现Web服务器与CGI程序的信息交流。浏览器的当前文件使用get,post等方法调用CGI程序,并将要传送的信息送到服务器端。CGI通过标准输入(STDIN)获取用户输入信息,通过标准输出(STDOUT)向用户传递结果。

WebServerCGIProgramhttp://server/form-proc.exeHTMLCGI工作原理(Windows平台)CGI程序执行CGI是运行在服务器上的程序。它可以用任何语言编写-只要能够在你的服务器上运行。CGI脚本可能是一个编译好的程序或者批命令文件或者其他可执行的程序。服务器端对每个CGI请求产生一个新的进程。CGI程序执行编程语言:C/C++Perl是PracticalExtractionandReportLanguage的缩写TCL即ToolCommandLanguage,它是高级的跨平台的Script语言VB缺点:每次对CGI的请求产生新进程,会限制服务器处理多请求的能力。

服务器端脚本技术页面中嵌入脚本,页面被请求时脚本由服务器解释执行,产生动态内容

。可采用的技术:

IBMNet.data

MicroSoft:ASP

Allaire:ColdFusion

PHP缺点:局限于特定web服务器产品和OSCGI与PHP、ASP1994年,Rasmus

Lerdorf发明了专用于Web服务端编程的PHP(PersonalHomePageTools)语言;PHP语言将HTML代码和PHP指令合成为完整的服务端动态PHP页面文件、具有PHP文件处理功能的WEB服务器生成HTML文档;1996年,Microsoft借鉴PHP的思想,在其Web服务器IIS3.0中引入了ASP技术。ASP使用的脚本语言是我们熟悉的VBScript和javascript。CGI与PHP、ASP

<html>

<body>

<?php

$db=mysql_connect(“localhost”,“root”);

mysql_select_db(“mydb”,$db);

$result=mysql_query(“SELECT*FROMemployees”,$db);

printf(“FirstName:%s<br>n”,mysql_result($result,0,“first”));

printf(“LastName:%s<br>n”,mysql_result($result,0,“last”));

?>

</body>

</html>

服务端插件技术插件即英文的Plug-In,它也是程序,它是用遵循一定规范的API编写出来的。Web浏览器和服务器都能够直接调用插件代码。插件(Plug-In)软件安装之后,就成为他们的一部分,处理特定类型的请求。最著名的API是Netscape公司的NSAPI和Microsoft公司的ISAPI.缺点:由于NSAPI或ISAPI是动态链接的方式,因此在执行时若出现问题,会导致Web服务器瘫痪;对平台的依赖性太高;只能使用C语言开发。服务端APIAPI(ApplicationProgramInterface):应用程序接口API解决多线程问题,而CGI无法实现多线程API使用动态链接库只能用C语言编写两种API:Netscape公司的NSAPI和Microsoft的ISAPI服务端API

Netscape和MicroSoft

公司分别提供了基于本身的Web服务器的API调用:NetscapeNSAPI、MicroSoftISAPI基本思路是由HTTP守护进程加载可独立执行的CGI程序改为加载动态链接库,取消了启动与释放进程的开销。服务端API<html><head>ISAPI示例网页</head><body><formaction="/gjy/isapi1/debug/isapi1.dll?RegisterUser"

method=post>输入注册信息:<br>姓名:<inputtype="text"name="First"><br>地址:<inputtype="text"name="Middle"><br>信箱:<inputtype="text"name="Last"><p><inputtype="submit"value="提交"><inputtype="reset"value="重置"></p></form></body></html>服务端API优点:1)执行速度快;2)多线程处理多用户访问。缺点:1)NSAPI

ISAPI

对网站平台的依赖型太高;2)NSAPI

ISAPI

只提供

C

程序语言的界面;3)影响Web服务器的稳定性。JavaServlet技术Servlet是什么?

Servlet是一种用Java写的Web组件,是Java的扩展类,它的目的是产生动态内容;Servlet组件使用JavaServletAPI提供的类和方法;Servlet组件在Web容器中执行,Web容器提供运行时的服务;启动Web服务器或客户机第一次请求服务时,可以自动装入

Servlet。装入后,Servlet和采用轻量级线程响应多个客户机发出的请求;Servlet技术JavaServlet是一种在服务器端运行的小型Java程序。它可以作为一种插件嵌入到Web服务器中,提供诸如HTTP,FTP等协议服务或用户订制的协议服务。Servlet可以从HTML表单中获取数据,进行网站数据库的更新。Servlet技术Servlet就是JavaServlet

,是一个Java类,是一个基于Java技术的运行在服务器端的程序;Servlets是JAVA

2.0中新增的一个全新功能,

是一种采用JAVA技术来实现CGI功能的一种技术;Servlet运行于由Servlet引擎所管理的Java虚拟机中,被来自Web客户机的请求所唤醒并用来处理请求;

主要依赖两个软件包(API):Javax.servlet包和Javax.servlet.http包;Servlet的开发工具:J2SDK开发工具箱、Jbuilder

等集成开发工具。Servlet技术-特性持久性和性能:JAVA

Servlet来说,在JAVA

虚拟机上,每一个请求由一个'小'JAVA线程(thread)响应,而不是一个`大`操作系统进程。基于Java,具有Java的优势。JAVA

ServletAPI定义了JAVA

Servlet和Web服务器软件之间的接口。JSP(JavaServerPages)JSP网页就是在HTML网页中包含了能够生成动态内容的可执行应用程序代码(JSP标记);

JSP用于创建可支持跨平台及跨Web服务器的动态网页;可以调用用Java类访问外部应用和数据资源;JSP将应用程序逻辑和页面显示分离。JSP例<HTML><%@pagelanguage=="java"imports=="com.wombat.JSP.*"%><H1>Welcome</H1><P>Todayis</P><jsp:useBeanid=="clock"class=="calendar.jspCalendar"/><ul><li>Day:<%==clock.getDayOfMonth()%><li>Year:<%==clock.getYear()%></ul>JSP例<%if(Calendar.getInstance().get(Calendar.AM_PM)==Calendar.AM){%>GoodMorning<%}else{%>GoodAfternoon<%}%><%@includefile=="copyright.html"%></HTML>JSP与JavaServletJSP技术的特点内容表达与数据生成分离更好的M/V/C易用性移植与跨平台基于Java支持协作开发JSP与其它动态网页技术比较与传统的CGI方式相比JSP和ASP相比JSP和纯Servlet相比JSP和JavaScript相比几种服务器端技术的比较本节结束

Servlet&JSP

开发技术

JavaServlet开发技术采用Servlet

的原因

性能比CGI高效

Servlet可轻松地处理多个并发请求

Servlet

是什么?

Servlet是一种用Java写的Web组件,是Java的扩展类,它的目的是产生动态内容;Servlet组件使用JavaServletAPI提供的类和方法;Servlet组件在Web容器中执行,Web容器提供运行时的服务;启动Web服务器或客户机第一次请求服务时,可以自动装入

Servlet。装入后,Servlet和采用轻量级线程响应多个客户机发出的请求;

JavaServlet运行JavaServlet是一种在服务器端运行的Java程序。它可以提供诸如HTTP,FTP等协议服务或用户订制的协议服务。Servlet可以从HTML表单中获取数据,并可进行数据处理和更新。Servlet的功能?创建并返回一个包含基于客户请求性质的动态且内容完整的HTML页面;创建可嵌入到现有HTML页面中的一部分

HTML页面;与其它服务器资源(包括数据库和基于Java的应用程序)进行通信;处理与多个客户机处理连接,接收多个客户机的输入,并将结果广播到多个客户机上(网络游戏服务);作为数据过滤器(Filter),在调用Servlet之前或之后调用;作为服务器的标准公用服务例行程序,被其它Servlet调用。Servlet的功能?Servlet经常用于处理如下任务:检查和处理用户输入处理重要的业务逻辑数据库查询、更新处理复杂的Web事务处理Web页面的转发操作JavaServlet生命周期Servlet生命期周期-初始化装入时刻:启动服务器时自动装入;首次向

Servlet发出请求时;重新装入Servlet时。装入

Servlet后:创建一个Servlet实例(而不是多个);调用

Servlet的init()方法;Servlet初始化参数被传递给Servlet配置对象;特定Servlet如需要初始化特有的资源,需要重载init()方法,并在方法最后呼叫super.init()。Servlet生命期周期-请求处理服务器将每个客户请求包装成Servlet接受的“请求”对象和“响应”对象;调用Servlet的service()方法用于传递“请求”和“响应”对象;service()方法从“请求”对象获得请求信息、处理该请求并用“响应”对象的方法以将响应传回客户机;HttpServlet

类有自己的service()方法,该方法可以调用其它子方法来处理请求,通常是doGet()、doPost()或其它的方法。Servlet生命期周期-终止当服务器卸载

Servlet(实例)时,调用该Servlet的destroy()方法终止当前Servlet实例的运行,释放资源。特定Servlet如需要特有的资源关闭,需要重载destroy()方法,并在方法最后呼叫super.destrory()。Servlet生命期周期基于Servlet的Web交互JavaServletAPIJavaServlet开发工具(J2SDK)提供了多个软件包,在编写Servlet时需要用到这些软件包;J2SDK包括两个用于所有

Servlet的基本软件包:

javax.servlet

(7个接口5个类)

javax.servlet.http

(HTTPServlet5个接口4个类)

JavaServletAPI包含在上述两个包中;TheServletAPIisasetofJavaclasseswhichdefineastandardinterfacebetweenaWebclientandaWebserver.JavaServletAPI?实现JavaServlet接口的两个基类:

javax.servlet.GenericServlet

(属于javax.servlet包)

javax.servlet.http.HttpServlet

(属于javax.servlet.http包)HttpServlet类扩展了GenericServlet类,添加了处理HTTP请求的方法。Severlet类的继承

HTTPServlet的请求/响应流程浏览器发出HTTP请求对象Request对象;Web容器将请求数据封装:请求对象Request--〉HttpServletRequest

响应对象Response--〉HttpServletResponse

调用HTTPServlet中的service方法:

service(HTTPServletRequest

reg,HTTPServletResponse

res)HTTPServlet中的service方法根据请求,调用子方法doGet、doPost、doPut、doDelete等子方法生成响应结果。表单中调用HTTPServletHTML表单是由<FORM>和</FORM>标记定义,表单中包含输入字段(如文本输入字段、复选框、单选按钮和选择列表)和用于提交数据的按钮。提交信息时,可指定服务器应执行哪一个Servlet。

HttpServlet

类包含

init()、destroy()、service()等方法。其中init()和destroy()方法是继承Servlet的。JavaServletAPI-init()方法

在Servlet的生命期中,仅执行一次

init()方法。它是在服务器装入

Servlet时执行的。缺省的init()方法设置了

Servlet的初始化参数,并用

ServletConfig

对象的参数来表示初始化配置。重载init()方法可增加功能,如一次GIF图像装入、初始化数据库连接。但应调用

super.init()以确保缺省的init()方法完成设置

Servlet的初始化参数。JavaServletAPI-service()方法设计HTTPServelet的处理逻辑,一般只需覆盖service()方法的子方法doget()、dopost方法即可。HttpServlet的其它子方法还有:

doPut()、doDelete()、doTrace()HttpServlet类扩展了GenericServlet类,继承了所有标准Servlet的功能。JavaServletAPI-destroy()方法当服务器卸载

Servlet时,需在所有service()方法调用完成后,或在指定的时间间隔过后调用destroy()方法。一个Servlet在运行service()方法时可能会产生其它的线程,因此请确认在调用destroy()方法时,这些线程已终止或完成。重载destroy()方法可附加其它功能,如管理服务器端资源。ServletRequest类定义的方法Servlet的请求对象ServletRequest封装请求参数,响应对象ServletRepones封装输出结果。请求对象ServletRequest中可用的方法有:getCharacterEncoding:

获得请求的编码格式信息isSecure:

确定请求是否通过安全通道发出getParamentName:

获得请求中所有参数名列表getRemoteAddr:

获得客户端IPgetParament:

检索与命名参数关联的第一个参数的值(多选/同名)getParamentValues:检索与命名参数类型关联的多个参数的值ServletRepones类定义的方法响应对象ServletRepones中可用的方法有:getOutStream:

获得ServletOutStream对象用于二进制输出getWrite:获得PrintWrite对象用于字符数据输出setBuffferSize:为响应建立内存缓冲flushBuffer:

更新当前缓冲区内容

ServletAPI

-GetServletConfig()方法返回一个

ServletConfig

对象,调用该对象中的方法可用来返回当前Servlet的初始化参数和

ServletContext接口。ServletContext

接口提供有关servlet

的环境信息。ServletConfig

对象和ServletContext

接口的初始参数来源于web.xml文件。

获取Servlet初始参数和运行环境ServletConfig

对象的方法:getInitParamenter(String):返回指定参数名的初始值;getInitParamenterName():返回初始参数名的集合;getServletContext():返回Servlet的运行环境对象ServletContext,Servlet用ServletContext对象与容器通信;JavaServlet与web.xmlServletDefinitioninweb.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEweb-appPUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.2//EN""/j2ee/dtds/web-app_2_2.dtd"><web-app><servlet><servlet-name>registerpatron</servlet-name>

JavaServlet与web.xml(续)

<servlet-class>com.borland.samples.welcome.registerPatron</servlet-class></servlet><servlet-mapping><servlet-name>registerpatron</servlet-name><url-pattern>/registerpatron</url-pattern></servlet-mapping></web-app>ServletContext

接口每种Servlet都运行在一定的环境中,ServletContext提供有关servlet

的环境信息;Web容器中的一个Web应用对应一个ServletContext,Servlet可使用ServletConfig

对象的getServletContext方法获得它所运行时的ServletContext对象。JavaServletAPI

-GetServletInfo()方法GetServletInfo()方法提供有关servlet

的信息,如作者、版本、版权。创建HTTPServlet创建一个HTTPServlet,通常涉及下列四个步骤

扩展

HttpServlet

抽象类重载适当的方法。如覆盖(或称为重写)doGet()或doPost()方法如果有HTTP请求信息的话,获取该信息。从HttpServletRequest

对象中检索

HTML表格所提交的数据或

URL上的查询字符串生成

HTTP响应

创建HTTPServlet响应HttpServletResponse是“响应”对象;“响应”对象包含

getWriter()方法,该方法返回一个PrintWriter类型的对象;使用

PrintWriter对象的

print()和println()方法编写

Servlet响应内容;out对象是缺省说明的PrintWriter类型对象,可直接使用;HTTPServlet例(一)RegisterPatronServlet代码RegisterPatron.javapackage

com.ibm.ils.library.servlets;import

java.io.IOException;import

java.io.PrintWriter;import

javax.servlet.ServletException;import

javax.servlet.http.HttpServlet;import

javax.servlet.http.HttpServletRequest;import

javax.servlet.http.HttpServletResponse;public

class

RegisterPatron

extends

HttpServlet{public

void

doGet(HttpServletRequest

req,HttpServletResponse

resp)

throws

ServletException,IOException{

processRequest(req,resp);} HTTPServlet例(一)

public

void

doPost(HttpServletRequest

req,HttpServletResponse

resp)

throws

ServletException,IOException{

processRequest(req,resp); }

private

void

processRequest(

HttpServletRequest

req,

HttpServletResponse

resp)throws

IOException,IOException{

HTTPServlet例(一)

PrintWriterout=resp.getWriter();

intid=LibraryIdGenerator.generatorID("First","Last");

out.println("<HTML>");

out.println("<HEAD><TITLE>添加资助人</TITLE></HEAD>");

out.println("<BODY>");

out.println("<p>");

out.println("patronwithid"+id+"hasbeenadded.");

out.println("</BODY>");

out.println("</HTML>"); }}HTTPServlet样例(二)

importjava.io.*;

importjava.util.*;

importjavax.servlet.*;

importjavax.servlet.http.*;

publicclassServletSampleextendsHttpServlet{//第一步:

扩展

HttpServlet

抽象类。

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

//第二步:重写doGet()方法

HTTPServlet样例(二)

StringmyName="";//第三步:获取HTTP请求信息

java.util.Enumerationkeys=request.getParameterNames();

while(keys.hasMoreElements());

{

key=(String)keys.nextElement();

if(key.equalsIgnoreCase("myName"))

myName=request.getParameter(key);

}

if(myName=="")

myName="Hello";一个HTTPServlet样例(二)

//第四步:生成

HTTP响应。

response.setStatus(HttpServlet.SC_OK);

response.setContentType(“text/html”);

response.setHeader("Pragma","No-cache");

response.setDateHeader("Expires",0);

response.setHeader("Cache-Control","no-cache");

PrintWriter

out=response.getWriter();

out.println("<HTML>");

out.println("<head><title>Justabasicservlet</title></head>");

out.println("<body>");一个HTTPServlet样例(二)

out.println("<h1>Justabasicservlet</h1>");

out.println("<p>"+myName+",thisisaverybasicservletthatwritesanHTMLpage.");

out.println("<p>runningthosesamplesonyourWeb应用服务器,"+"openthepage:");

out.println("</body></html>");

out.flush();

}

}

HTTPServlet样例

上述ServletSample类扩展

HttpServlet

抽象类、重写doGet()方法。在重写的doGet()方法中,获取HTTP请求中的一个任选的参数(myName),该参数可作为调用的

URL上的查询参数传递到

Servlet。使用示例如下:http:///servlet/ServletSample?myname=Michael

处理HTTPRequest的步骤处理输入数据(请求字符串或form表单)处理HTTPRequest头部给出的属性值处理/调用商务逻辑设置HTTPResponse响应状态和文档内容格式设置HTTPResponse响应的其它头部信息向HTTPResponse响应对象中输出响应内容(HTTP规范参见RFC2616)调用

Servlet由URL调用(浏览器、HTML)在

<FORM>标记中调用在JSP文件中调用URL调用Servlet应用服务器管理器可注册Servlet,同时指定Servlet名称:http:///servlet/hi可以指定

Servlet和类使用同一名称。使用

Servlet别名:应用服务器管理器来配置

Servlet别名。在<FORM>标记中调用

Servlet<FORMMETHOD="GET"ACTION="/servlet/myservlet"><OL><INPUTTYPE="radio"NAME="broadcast"VALUE="am">AM<BR><INPUTTYPE="radio"NAME="broadcast"VALUE="fm">FM<BR></OL></FORM>(表单完成GET方法的URL参数编码)在JSP中调用

Servlet(>=JSP1.0)<jsp:forwardpage="myservlet"><jsp:includepage="myservlet">Servlet高级特性-ResponseRedirectionRedirecttheservletresponseto:-Anotherservlet-Anerrorpage(HTMLorJSP)URLmustbeavailabletothecallingservlet,inthesameservletcontext.Twoformsofresponseredirection:-Standardredirectusingresponse.sendRedirect()-Redirecttoanerrorpageusingresponse.sendError()Servlet高级特性-ResponseRedirectionprivatevoidprocessRequest(HttpServletRequestrequest,HttpServletResponseresponse)...{//processrequestheaders&querydata...//redirecttoanotherURLStringurl="/YourResults.html";if(test.equals("Error"))response.sendError(response.SC_BAD_REQUEST);elseresponse.sendRedirect(response.encodeRedirectURL(url));return;}//浏览器实现重定向,导致客户端重新发出新的请求Servlet高级特性-ServletContextServletContext提供Servlet运行环境信息,一个Servlet属于管理员确定的唯一ServletContext一个Web应用对应一个ServletContextServlet可使用ServletContext接口来存储和检索运行环境信息,也可与其它Servlet共享信息Servlet可用getServletContext()方法得到它所运行的ServletContextServlet高级特性-ServletContextServletContext接口提供的基本服务有:setAttribute

在ServletContext中存储信息getAttribute

检索

ServletContext中的信息getAttributeName

获得ServletContext中属性的名称removeAttribute

删除ServletContext中一个属性Servlet高级特性-RequestDispatchergetServletContext().getRequestDispatcher("/pages/showBalance.jsp").forward(req,res);getServletContext().getRequestDispatcher("/pages/navigation_bar.html").include(req,res);//直接从servlet转出,无需客户端参与Servlet高级特性-forward/includeServlet高级特性-SharingObjectsThereareseveralwaystoshareobjectsbetweenservlets/JSPs:-ServletContextgetServletContext().setAttribute("objectName",anObject);getServletContext().getAttribute("objectName");-HttpServletRequestrequest.setAttribute("objectName",anObject);request.getAttribute("objectName");JSP技术JSP简介由于基于JavaServlet技术的网页制作不能脱离JavaServlet,如果开发人员想要调整页面显示,必须重新编译该JavaServlet。Jsp为解决这种问题应用而生,将应用程序逻辑和页面显示分离。简单地说,一个JSP网页就是在HTML网页中包含了能够生成动态内容的可执行应用程序代码,此应用程序可能包含JavaBean,JDBC对象,EJB对象和RMI对象。JSPJSP是包含了JSP标记的HTML/XML文档JSP可以使用JavaBeans访问外部应用和数据资源JSP可以与JavaServlet结合使用JSP技术的特点内容表达与数据生成分离更好的M/V/C易用性移植与跨平台基于Java支持协作开发JSP简介JSPisatechnologythatletsyoumixregularstaticHTMLwithdynamicallygeneratedHTML.JSPsallowserver-sidescripting:-StatictagsareHTMLorXMLorothermarkuplanguage.-Dynamiccontentgeneratedbyscriptingcode.Javaisthe(default)scriptinglanguage.

JSP简介AJSPfile(hasanextensionof.jsp)containsanycombinationof:-JSPsyntax.-MarkuptagssuchasHTMLorXML.Example:<HTML><HEAD><TITLE>SimpleJSP</TITLE></HEAD><BODY><H1>Today'sdateandtimeare:<%=newjava.util.Date()%></H1></BODY></HTML>JSP简介访问JSP的方式:

ByURLByaservletByaJSPJSP可调用:

AservletAnotherJSP

其它可重用的组件,如JavaBean

等浏览器请求JSP文件当Web服务器接收到一个JSP文件请求时,服务器将请求发送至应用服务器。应用服务器对

JSP文件进行语法分析并生成Java源文件(被编译和执行为Servlet)。Java源文件的生成和编译仅在初次调用Servlet时发生,除非已经更新了原始的

JSP文件。应用服务器将检测JSP文件的更新,并在执行它之前重新生成和编译Servlet。Servlet请求JSP文件发送至

Servlet的请求生成动态内容,并调用JSP文件形成动态内容页面发送到浏览器应用服务器支持Servlet将一个对象放入(通常是一个Bean)请求对象中,并将该请求传递到另一个页面(通常是一个JSP文件)以供显示调用的页面从请求对象中检索Bean,并用JSP来生成客户端的HTMLServlet请求JSP文件模型JSP页面由JSP引擎执行,JSP引擎接受客户端对JSP页面的请求,并且生成JSP页面给客户端的响应当JSP页面第一次被调用时,会被编译成为一个JavaServlet类,并且存储在服务器的内存中。JSP页面可以用于由不同协议、组件和格式所组成的联合体中。JSP语法规范1999年12月,SUN公司发布《JSP1.1规范》。JCP(JavaCommunityProcess:Java社区项目)组织负责制定JSP规范,成员包括规范作者,应用服务器、JSP和服务器小程序的开发者,他们来自大小小各个公司商家,也有的是开放式资源的参与者。JCP推出了《JSP1.2规范》(代号JSR-053)。JCP的JSP1.2是根据最新版本《Servlet2.3规范》制定的,向后兼容JSP1.1。JSP2.0是对JSP1.2的升级,它增加了一种称为SimpleTag的新扩展机制来简化标签API(TagAPI)。JSP的基本语法语法(1)JSP指示

JSP指示将指令传递到JSP引擎(页面指示,语言指示,包含指示,标识库指示)(2)JSP标识核心标识包括:jsp:useBean;jsp:setProperty;jsp:getProperty(3)脚本元件

JSP页面中包含代码段,在请求的处理过程中被执行。JSP例子<html><%@pagelanguage==“java”imports==“com.wombat.JSP.*”%><H1>Welcome</H1><P>Todayis</p><jsp:useBeanid==“clock”class==“calendar.jspCalendar”/><u1><li>Day:<%==clock.getDayofMonth()%><li>Year:<%==clock.getYear()%></u1><%if(Calendar.getInstance().get(Calendar.AM-PM)====Calendar.AM){%>goodmorning<%}else{%>goodafternoon<%}%><%@includefile==“copyright.html”%></html>JSP例子JSP语言指示:第二行指出从该页面将访问的Java编程语言的扩展位置。

固定模板数据,(UL)和(H1)标识。

JSP动作标识:jsp:useBean标识实例化服务器端的ClockJavaBean.

表达式:JSP引擎计算在<%==和%>标记间的所有东西。例如时钟组件(Clock)的Day和year属性值作为字符串返回,并且作为输出插入到JSP文件中。

小脚本:程序中的小脚本确定现在是上午还是下午,并且据此来欢迎用户。JSP语法(JSP1.1规范)指令(Directive)

通过设定JSP引擎的特性从整体上控制生成的Servlet结构脚本元素(ScriptingElement)脚本元素用来嵌入Java代码,这些Java代码将成为转换得到的Servlet的一部分动作(Action)用来引入已有的组件JSP语法(JSP1.1语法规范)Directives

InstructionstotheJSPengine/compilerScripting

Declarations-additionalmethodsandvariablestobegeneratedintotheJSPservlet

Scriptlets-InlineJavacode

Expressions-JavacodethatresolvestoStringsActionsavailablewithintheJSPservlet

Standardactionsforbeanusage,flowcontrolCustomactionscanbeaddedJSP1.1语法-3类指令<%@pagelanguage="java"%><%@includefile="companyBanner.html"%><%@taglib

uri="tagLibraryURI"prefix="tagPrefix"%>JSP1.1语法-page指令

格式:

<%@pageatt="val"%>作用:定义了应用于整个JSP页面的属性,向转换器说明所生成的类的不同特性。等价的XML表达:

<jsp:directive.page

att="val"\>例:<%@pagelanguage="java"%>合法的属性att如下表:JSP1.1语法-合法的page属性language="scriptingLanguage“isThreadSafe="true|false"extends="className"info="info_text"import="packageList"errorPage

="error_url"session="true|false"isErrorPage

="true|false"buffer="none|sizekb"contentType

="Type;autoFlush

=“true|false“JSP语法-page指令

(1)language:文件中所使用的脚本语言。示例如下:<%@pagelanguage="java"%>默认值:java(2)isThreadSafe="true|false“默认值:true该页面多线程请求安全(3)extends="className"info="info_text“默认值:JSP类定义的标准超类该jsp生成的Servlet是指定Java语言类的扩展。示例如下:<%@pageextends="MyHttpJspPage"%>JSP语法-page指令

(4)errorPage

="error_url“默认值:任何未捕获的异常(exception),显示error.jsp(5)session="true|false“默认值:true,可以创建HttpSession(6)isErrorPage

="true|false“默认值:false,该不是一个错误提示页面(7)buffer="none|sizekb“默认值:8kb的默认输出器缓冲JSP语法-page指令

(8)contentType="Type;生成的响应的MIME类型。默认值:text/html例:<%@

pagecontent_type="text/html;charset=gb2312"%>。(9)autoFlush=“true|false“默认值:true,缓冲区满自动刷新(10)import="packageList"JSP页面中导入的Java语言软件包名或类名列表,该列表是用逗号分隔。JSP语法-page指令

默认值:

java.lang.*

java.servlet.*

java.servlet.http.*

java.servlet.jsp.*例:<%@pageimport="java.io.*,java.util.Hashtable"%>JSP1.1语法-include指令格式:<%@includefile="url"%>

作用:当JSP转换成Servlet时,应当包含指定的文件。引入文件是静态包含。等价的XML表达:

<jsp:directive.includefile=“url”\>

例:<%@includefile="companyBanner.html"%>JSP1.1语法-taglib指令格式:

<%@taglib

uri="tagLibraryURI"prefix=“tagPrefix”%>

Jsp前缀是与标准动作关联的。JSP语法-JSP声明格式:<%!code%>作用:代码被插入到Servlet类(在service方法之外)。等价的XML表达是:

<jsp:declaration>

code

</jsp:declaration>JSP语法-JSP声明例:声明java域<%!Privatestringpattern=“mm/dd/yyyy”%>声明java方法<%!Publicstringformat(java.util.dated,stringpattern){

java.text.simpledateFormat

sdf=newjava.text.simpleDateaFormat(pattern);stringresult=sdf.format(d);returnresult;}%>JSP语法-Scriptlet格式:<%valid_code_fragment%>作用:插入到service方法的代码。等价的XML表达是:

<jsp:scriptlet>

code

</jsp:scriptlet>例:<%for(intI=1;I<=5;I++){out.println(“<p><FONTSIZE=“+I+“>Hello</FONT></p>”);}%>JSP语法-JSP注释

JSP注释:<%--comment--%>JSP转换成Servlet时被忽略HTML/XML注释:<!--comment-->JSP语法-表达式

格式:

<%=expression%>作用:--Theexpressionisevaluated--ResultisconvertedtoaStringanddisplayed例:<%=incrementCounter()%>JSP语法-内置变量

request

用户端请求,此请求会包含来自GE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论