2020/1/10JSPJSP的基本语法常用标记2JSP2020/1/10Agenda1.静态页面or动态页面2.firstjsp3.JSP运行架构及原理4.JSP基本语法:注释、声明、表达式、程序段5.from标记6.input标记7.JSP指令:include、page、taglib8.JSP动作:jsp:include、jsp:forward、jsp:param3JSP2020/1/10Objective掌握JSP运行架构掌握JSP基本语法掌握JSP指定及动作能将以前所写的HTML转换为JSP静态页面or动态页面为什么要等到客户请求页面的时候,才让程序去构建结果呢?为什么不将网页提前做好呢?是的,预先建立的文档可以满足客户的许多请求,服务器无需调用servlet就可以处理这些请求。然而,许多情况下静态的结果不能满足要求,我们需要针对每个请求生成一个页面。实时构建网页的理由有很多种:1.网页基于客户发送的数据。例如,搜索引擎生成的页面都要针对特定的用户请求而生成。在没有读取到用户提交的数据之前,我们不知道应该显示什么。用户提交两种类型的数据:显式(即HTML表单的数据)和隐式(即HTTP请求的报头)。两种输入都可用来构建输出页面。基于cookie值针对具体用户构建的页面情况尤其普遍。42020/1/10JSP静态页面or动态页面2.网页有频繁改变的数据导出。如果页面需要根据每个具体的请求做出相应的更改,当然需要在请求发生时构建响应。但是,如果页面周期性地改变,我们可以用两种方式来处理它:周期性地在服务器上构建新的网页(与客户请求无关),或者仅仅在用户请求该页面时再构建。具体应该采用哪种方式要依具体情况而定,但后一种方式常常更为方便,因为它只需简单地等待用户的请求。例如,天气预报或新闻网站可能会动态地构建页面,也有可能会返回之前构建的页面(如果它还是最新的话)。3.网页中使用了来自公司数据库或其他服务器端数据源的信息。如果数据存储在数据库中,那么,即使客户端使用动态Web内容,比如applet,我们依旧需要执行服务器端处理。想像以下,如果一个搜索引擎网站完全使用applet,那么用户将会看到:正在下载50TB的applet,请等待!这种情况下,我们需要与服务器进行会话。从客户端到Web层再到数据库(三层结构),要比从applet直接到数据库(两层结构)更灵活,也更安全。52020/1/10JSPJSP简介JSP(JavaServerPages)是由sun公司为创建动态Web内容而定义的一种技术。JSP页面看起来象普通的HTML页面,但它允许嵌入执行代码,这一点和ASP技术非常相似。JSP使得我们能够分离页面的静态HTML和动态部分。JSP可用任何文本编辑器(如记事本等)编写,只要以“jsp”为扩展名保存即可。在编写JSP文件时,可以先编写HTML文档,然后在其中嵌入Java代码创建动态内容。%@pagecontentType=text/html;charset=gb2312%%@pageimport=java.util.*%...HTMLBODY其他HTML语言%符合JAVA语法的JAVA语句%其他HTML语言/BODY/HTML一个JSP页面的基本结构通常包含三部分:普通的HTML标记、JSP标签、JSP脚本(变量和方法的声明、Java程序片和Java表达式)。例:1%@pagecontentType=text/html;charset=gb2312language=javaimport=java.sql.*errorPage=%2html3head4metahttp-equiv=Content-Typecontent=text/html;charset=gb23125titlejsp页面基本结构/title6/head7body8%!inti,total;%9%10for(i=1,total=0;i=50;i++){11total=total+i;12}13%14p从1加到50的结果是:%=total%/p15p现在的时间是:%=newjava.util.Date()%/p16/body17/html*.jsp*.java*.classrequestresponse执行jspparserJSDKservletservlet分析器JSP的执行过程:查找对应的JSP文件是否存在YN是否是修改或创建后第一次调用Y调用JspParser将其编译成Servlet程序调用JSDK将对应的Servlet程序编译成Servlet字节码执行(若未载入则先载入)已有的对应的Java字节码NJSP的执行流程:%@pageimport=java.util.*%%@pagecontentType=text/html;charset=gb2312%HTMLBODY你好,今天是%Datetoday=newDate();%%=today.getDate()%号,星期%=today.getDay()%/BODY/HTMLimportjava.util.*;response.setContentType(text/html;charset=gb2312);out=pageContext.getOut();out.write(“\r\n\r\nHTML\r\nBODY\r\n你好,今天是\r\n);Datetoday=newDate();out.print(today.getDate());out.write(号,星期);out.print(today.getDay());out.write(\r\n/BODY\r\n/HTML\r\n);JSP文件servlet文件JSP程序示例:JSP例程的执行结果:●程序可以跨平台执行。目前几乎所有平台上都可以见到一致的javaservlet/jsp的WebServer/ApplicationServe系统。JSP可以让开发人员在任意环境做开发,在任意环境进行系统部署,在任意环境扩展应用程序。●多样化和功能强大的开发工具支持。这一点与ASP很像,Java已经有了许多非常优秀的开发工具而且有许多可以免费得到,并且其中的许多已经可以顺利的运行于多种平台之下。●强大的的可伸缩性。从只有一个小的jar文件就可以运行servlet/jsp到由多台服务器进行集群和负载均横,到多台Application进行事务处理、消息处理......一台服务器到无数以服务器,Java显示了一个巨人的生命力。●高效的性能。对ASP、PHPP、JSP三种语言分别做回圈性能测试及存取Oracle数据库测试。在循环性能测试中,JSP只用了的四秒钟就结束了20000*20000的回圈,ASP、PHP测试的是2000*2000循环使用了63秒和84秒。JSP技术概述–优势1.将内容的生成和显示进行相分离2.强调可重用组件3.采用标识简化页面开发JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。作为采用Java技术家族的一部分,以及Java2(企业版体系结构)的一个组成部分,JSP技术能够支持高度复杂的基于Web的应用。●由于JSP页面的内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译成为JavaServlet,JSP页面就具有Java技术的所有好处,包括健壮的存储管理和安全性。●作为Java平台的一部分,JSP拥有Java编程语言“一次编写,各处运行”的特点。随着越来越多的供应商将JSP支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,更改工具或服务器并不影响当前的应用。●当与Java2平台,企业版(J2EE)和EnterpriseJavaBean技术整合时,JSP页面将提供企业级的扩展性和性能,这对于在虚拟企业中部署基于Web的应用是必需的。Web应用开发的JavaServerPages技术方法和ASP、PHP、.NET类似,Java的一些优势也是它致命的问题所在。跨平台的功能和极度的伸缩能力极大的增加了产品的复杂性。也就是说,它在扩展时需要的分成多少块,那么java系统中就有多少种产品。所以用户要以看到jre、jdk、jsdk、jswdk等,实际上它们只要有效的搭配在一起,就可以产生强大的效能,密不可分,但这同时使应用程序变得非常复杂。●JSP只有对Java相当熟悉的人才能用得很好,而目前Java程序员还比较少。●JSP程序调试困难。JSP页面首先被转化为一个.java文件(servlet),然后再被编译。这样,出错信息实际上指向的是经过转化的那个.java文件而不是jsp本身。例如在.jsp文件第一行的错误可能被显示为第20行。如果试图通过反跟踪来解决这个问题有时会使结果显得很滑稽。(在Resin的引擎中,错误已经可以指向.jsp文件的出错行)。●很难选择合适的servlet引擎。目前还没有一个独立的组织来对各种引擎提供独立的benchmark测试。提供商只对他们自己的产品提供了benchmark测试,但结论通常以数据形式给出,但均回避了稳定性。jsp技术概述—不足JSP页面元素1616静态内容指令表达式ScriptletJSP页面%Java代码%%=Java表达式%HTML静态文本以“%@”开始,以“%”结束。比如:%@includefile=Filename%声明动作%!方法/变量%以“jsp:动作名”开始,以“/jsp:动作名”结束,比如:jsp:includepage=Filename/注释!--这是注释,但客户端可以查看到--%--这也是注释,但客户端不能查看到--%16注释JSP中的注释1.用户可以看到的注释;符号:!----.用户可以看到指的是用户可以通过浏览器的“查看-源文件”看到注释的内容。(并不是直接显示在页面上)。2.用户看不到的注释;符号:%----%这类注释主要是面向程序员的注释.方便程序员了解和更新程序代码.注释的用途主要有两个:1.代码的可读性和可维护性2.方便程序员进行jsp页面的调试。一般用!----来进行调试,因为你可以在注释内部加入EL(表达式),从而到运行页面点击浏览器:查看-源代码查看表达式的结果。用%----%不能达到这个目的,因为这个注释下的内容无法在浏览器中查看。17%@pagecontentType=text/html;charset=gb2312%%@pageimport=java.util.*“%htmlheadtitleHTML注释/title/headbodyh1HTML注释通过浏览器查看JSP源文件时可以看到/h1!--这是一个HTML注释--/body/html下面给出一个使用HTML注释的JSP例程,其源码如下。在浏览器查看到的源代码如下:htmlheadtitleHTML注释/title/headbodyh1HTML注释通过浏览器查看JSP源文件时可以看到/h1!--这是一个HTML注释--/body/html下面我们给出一个使用隐藏注释的JSP例程,其源码如下%@pagecontentType=text/html;charset=gb2312%%@pageimport=java.util.*“%htmlheadtitleec4-2.jsp/title/headbodyh1隐藏注释在浏览器中是查看不到的/h1%--这是一个隐藏注释--%/body/html在浏览器查看到的源代码如下:htmlheadtitleec4-2.jsp/title/headbodyh1隐藏注释在浏览器