




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaWEB开发-JSP,JSP入门,建立对JSP的直观认识 JSP的运行原理 分析JSP所生成的Servlet代码 JSP隐式对象 注册与配置jsp页面的访问路径 JSP与JavaScript的综合应用 JSP与Servlet的应用比较,JSP起源,在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变。 如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序代码产生,整个Servlet程序的代码将非常臃肿,编写和维护都将非常困难。 对大量静态内容的美工设计和相关HTML语句的编写,并不是程序员所要做的工作,程序员对此也不一定在行。网页美工设计和制作人员不懂Java编程,更是无法来完成这样的工作。 为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了JSP(Java Server Pages)技术作为解决方案。 JSP是简化Servlet编写的一种技术,它将Java代码和HTML语句混合在同一个文件中编写,只对网页中的要动态产生的内容采用Java代码来编写,而对固定不变的静态内容采用普通静态HTML页面的方式编写。,建立对JSP的直观认识,JSP页面是由HTML语句和嵌套在其中的Java代码组成的一个普通文本文件,JSP 页面的文件扩展名必须为.jsp。 在JSP页面中编写的Java代码需要嵌套在中,嵌套在之间的Java代码被称之为脚本片段(Scriptlets),没有嵌套在之间的内容被称之为JSP的模版元素。 JSP中的Java代码可以使用out.println语句将其他Java程序代码产生的结果字符串输出给客户端,也可以使用System.out.println语句将它们打印到命令行窗口。 JSP文件就像普通的HTML文件一样,它们可以放置在WEB应用程序中的除了WEB-INF及其子目录外的其他任何目录中,JSP页面的访问路径与普通HTML页面的访问路径形式也完全一样。 在JSP页面中也可以使用一种称之为JSP表达式的元素,只需将要输出的变量或表达式直接封装在之中,就可以向客户端输出这个变量或表达式的运算结果。在JSP表达式中嵌套的变量或表达式后面不能有分号。,JSP的运行原理,WEB容器(Servlet引擎)接收到以.jsp为扩展名的URL的访问请求时,它将把该访问请求交给JSP引擎去处理。 每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。 JSP规范也没有明确要求JSP中的脚本程序代码必须采用Java语言,JSP中的脚本程序代码可以采用Java语言之外的其他脚本语言来编写,但是,JSP页面最终必须转换成Java Servlet程序。 可以在WEB应用程序正式发布之前,将其中的所有JSP页面预先编译成Servlet程序。,JSP隐式对象,public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException JspFactory _jspxFactory = null; PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; . . Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request); if (exception != null) response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); ,注册与配置JSP页面的访问路径, SimpleJspServlet /jsp/simple.jsp 1 SimpleJspServlet /xxx/yyy.html ,JSP与Servlet的应用比较,JSP是一种以产生网页显示内容为中心的WEB开发技术,它可以直接使用模版元素来产生网页文档的内容。 JSP页面的源文件要比Servlet源文件简单,并且JSP页面的开发过程要比Servlet的开发过程简单得多。 JSP引擎可以对JSP页面的修改进行检测,并自动重新翻译和编译修改过的JSP文件。 JSP技术是建立在Servlet技术基础之上的,所有的JSP页面最终都要被转换成Servlet来运行。 在大型WEB应用程序的开发中,Servlet与JSP经常要混合使用,各司其职,Servlet通常用作控制组件,并处理一些复杂的后台业务,JSP则作为显示组件。 一次响应过程可以划分成几个功能模块来协同完成,首先由Servlet完成流程控制和业务处理,并将结果数据存储在request或session域中,然后将请求转发(forward)到JSP页面,再由JSP页面从request或session域中取出结果数据并完成响应内容的输出。通过这种方式实现业务逻辑与显示内容的分离,从而将应用程序开发者和网页作者的工作分离。,JSP基本语法,JSP模版元素 JSP表达式 JSP脚本片断 EL表达式 JSP注释 特殊字符序列的转义处理 如何查找JSP页面中的错误,JSP模版元素,JSP页面中的静态HTML内容称之为JSP模版元素,在静态的HTML内容之中可以嵌套JSP的其他各种元素来产生动态内容和执行业务逻辑。 JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观。,JSP表达式,JSP表达式(expression)提供了将一个java变量或表达式的计算结果输出到客户端的简化方式,它将要输出的变量或表达式直接封装在之中。 举例:Current time: JSP表达式中的变量或表达式的计算结果将被转换成一个字符串,然后被插入进整个JSP页面输出结果的相应位置处。 JSP表达式中的变量或表达式后面不能有分号(;),JSP表达式被翻译成Servlet程序中的一条out.print()语句。,JSP脚本片断(1),JSP脚本片断(scriptlet)是指嵌套在之中的一条或多条Java程序代码。 在JSP脚本片断中,可以定义变量、执行基本的程序运算、调用其他Java类、访问数据库、访问文件系统等普通Java程序所能实现的功能。 在JSP脚本片断可以直接使用JSP提供的隐式对象来完成WEB应用程序特有的功能。 JSP脚本片断中的Java代码将被原封不动地搬移进由JSP页面所翻译成的Servlet的_jspService方法中,所以,JSP脚本片断之中只能是符合Java语法要求的程序代码,除此之外的任何文本、HTML标记、其他JSP元素都必须在脚本片断之外编写。 JSP脚本片断中的Java代码必须严格遵循Java语法,例如,每条命令执行语句后面必须用分号(;)结束。 在一个JSP页面中可以有多个脚本片断(每个脚本片断代码嵌套在各自独立的一对之间),在两个或多个脚本片断之间可以嵌入文本、HTML标记和其他JSP元素。,JSP脚本片断(2),在一个JSP页面中可以有多个脚本片断(每个脚本片断代码嵌套在各自独立的一对之间),在两个或多个脚本片断之间可以嵌入文本、HTML标记和其他JSP元素。 举例: 这是一个HTML段落 多个脚本片断中的代码可以相互访问,犹如将所有的代码放在一对之中的情况。 举例:上面的JSP内容与下面的JSP内容具有同样的运行效果 这是一个HTML段落 ,JSP脚本片断(3),单个脚本片断中的Java语句可以是不完整的,但是,多个脚本片断组合后的结果必须是完整的Java语句,例如,涉及条件和循环处理时,多个脚本片断及其他元素组合的结果必须能形成完整的条件和循环控制语句。 由于脚本片断中的Java代码将被原封不动地搬移进由JSP页面所翻译成的Servlet的_jspService方法中,脚本片断之外的任何文本、HTML标记以及其他JSP元素也都会被转换成相应的Java程序代码插入进_jspService方法中,且脚本片断和其他JSP元素的插入位置与它们在JSP页面中的原始位置相对应。 在脚本片断中可以使用条件、循环、选择等流程控制语句来创建其周围的其他元素的执行逻辑,因此,在编写JSP页面时应考虑各个元素之间的先后顺序和相互关系,特别是将循环、条件判断等语句分布在若干个脚本片断中编写时对其邻近的其他JSP元素产生的影响。 举例1:, ,for (int i=1; rn“); ,举例2: 其他元素 其他元素 ,JSP声明,JSP声明将Java代码封装在之中,它里面的代码将被插入进Servlet的_jspService方法的外面,所以,JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法 。 多个静态代码块、变量和函数可以定义在一个JSP声明中,也可以分别单独定义在多个JSP声明中。 JSP隐式对象的作用范围仅限于Servlet的_jspService方法,所以在JSP声明中不能使用这些隐式对象。 JSP脚本片断中的Java代码必须严格遵循Java语法,例如,每条命令执行语句后面必须用分号(;)结束。 在一个JSP页面中可以有多个脚本片断(每个脚本片断代码嵌套在各自独立的一对之间),在两个或多个脚本片断之间可以嵌入文本、HTML标记和其他JSP元素。,JSP声明实例, globalVar: localVar:,JSP注释,JSP注释的格式: JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容。,如何查找JSP页面中的错误,JSP页面中的JSP语法格式有问题,导致其不能被翻译成Servlet源文件,JSP引擎将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息。 JSP页面中的JSP语法格式没有问题,但被翻译成的Servlet源文件中出现了Java语法问题,导致JSP页面翻译成的Servlet源文件不能通过编译,JSP引擎也将提示这类错误发生在JSP页面中的位置(行和列)以及相关信息。 JSP页面翻译成的Servlet程序在运行时出现异常,这与普通Java程序的运行时错误完全一样,Java虚拟机将提示错误发生在Servlet源文件中的位置(行和列)以及相关信息。,JSP指令,JSP指令简介 page指令 include指令,JSP指令简介,JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。 JSP指令的基本语法格式: 举例: 注意:属性名部分是大小写敏感的 在目前的JSP 2.0中,定义了page、include和taglib这三种指令,每种指令中又都定义了一些各自的属性。 如果要在一个JSP页面中设置同一条指令的多个属性,可以使用多条指令语句单独设置每个属性,也可以使用同一条指令语句设置该指令的多个属性。 第一种方式: 第二种方式: ,Page指令,page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。 JSP 2.0规范中定义的page指令的完整语法: ,JSP 引擎自动导入下面的包: java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.*,可以在一条page指令的import属性中引入多个类或包,其中的每个包或类之间使用逗号分隔: 上面的语句也可以改写为使用多条page指令的import属性来分别引入各个包或类: ,errorPage属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前页面。 可以在web.xml文件中使用元素为整个WEB应用程序设置错误处理页面,其中的子元素指定异常类的完全限定名,元素指定以“/”开头的错误处理页面的路径。 如果设置了某个JSP页面的errorPage属性,那么在web.xml文件中设置的错误处理将不对该页面起作用。,JSP引擎会根据page指令的contentType属性生成相应的调用ServletResponse.setContentType方法的语句。 page指令的contentType属性还具有说明JSP源文件的字符编码的作用。,include指令,include指令用于通知JSP引擎在翻译当前JSP页面时将其他文件中的内容合并进当前JSP页面转换成的Servlet源文件中,这种在源文件级别进行引入的方式称之为静态引入,当前JSP页面与静态引入的页面紧密结合为一个Servlet。 语法: 其中的file属性用于指定被引入文件的相对路径。 细节: 被引入的文件必须遵循JSP语法,其中的内容可以包含静态HTML、JSP脚本元素、JSP指令和JSP行为元素等普通JSP页面所具有的一切内容。 被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。 在将JSP文件翻译成Servlet源文件时,JSP引擎将合并被引入的文件与当前JSP页面中的指令元素(设置pageEncoding属性的page指令除外),所以,除了import和pageEncoding属性之外,page指令的其他属性不能在这两个页面中有不同的设置值。,include指令(续),细节: 除了指令元素之外,被引入的文件中的其他元素都被转换成相应的Java源代码,然后插入进当前JSP页面所翻译成的Servlet源文件中,插入位置与include指令在当前JSP页面中的位置保持一致。 引入文件与被引入文件是在被JSP引擎翻译成Servlet的过程中进行合并,而不是先合并源文件后再对合并的结果进行翻译。当前JSP页面的源文件与被引入文件的源文件可以采用不同的字符集编码,即使在一个页面中使用page指令的pageEncoding或contentType属性指定了其源文件的字符集编码,在另外一个页面中还需要用page指令的pageEncoding或contentType属性指定其源文件所使用的字符集 。 Tomcat 5.x在访问JSP页面时,可以检测它所引入的其他文件是否发生了修改,如果发生了修改,则重新编译当前JSP页面 file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。,include指令(续),假设myweb应用程序的根目录下有一个a.jsp文件,其一般的访问路径形式为: http:/localhost:8080/myweb/a.jsp 在a.jsp页面中使用了如下语句引入b.jspf文件: 请问:这时候JSP引擎调用的b.jspf文件的完整URL路径为什么? 如果将a.jsp页面映射为如下地址: http:/localhost:8080/myweb/dir1/a.html 请问:这时候JSP引擎调用的b.jspf文件的完整URL路径为: http:/localhost:8080/myweb/b.jspf http:/localhost:8080/myweb/dir1/b.jspf,() (),out隐式对象,在JSP页面中应使用out隐式对象来向客户端发送文本形式的实体内容。 out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。 JSP页面中的out隐式对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。 JSP页面中的out隐式对象相当于插入到ServletResponse.getWriter方法返回的PrintWriter对象前面的缓冲包装类对象。 只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中: 设置page指令的buffer属性关闭了out对象的缓存功能 写入到out对象中的内容充满了out对象的缓冲区 整个JSP页面结束,out隐式对象的工作原理图,pageContext对象,pageContext对象简介 获得其他隐式对象 引入和跳转到其他资源 访问各个域范围中的属性,pageContext对象简介,pageContext对象封装了当前JSP页面的运行信息,它提供了返回JSP页面的其他隐式对象的方法。 PageContext类中定义了一个setAttribute方法来将对象存储进pageContext对象内部的一个HashMap对象中,同时也定义了一个getAttribute方法来检索存储在该HashMap对象中的对象。 PageContext类除了可以存储和检索自身中的属性对象外,还定义了可以存储和检索其他域范围内的属性对象的方法。,获得其他隐式对象,getException方法返回exception隐式对象 getPage方法返回page隐式对象 getRequest方法返回request隐式对象 getResponse方法返回response隐式对象 getServletConfig方法返回config隐式对象 getServletContext方法返回application隐式对象 getSession方法返回session隐式对象 getOut方法返回out隐式对象,引入和跳转到其他资源,PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和RequestDispatcher.include方法的调用: public void forward(java.lang.String relativeUrlPath) throws javax.servlet.ServletException,java.io.IOException public void include(java.lang.String relativeUrlPath) throws javax.servlet.ServletException,java.io.IOException public void include(java.lang.String relativeUrlPath,boolean flush) throws javax.servlet.ServletException,java.io.IOException 传递给这些方法的资源路径都只能是相对路径,如果路径以“/”开头,表示相对于当前WEB应用程序的根目录,否则,表示相对于当前JSP所映射到的访问路径。,访问各个域范围中的属性,在application、session、request、pageContext对象中都可以调用setAttribute方法和getAttribute方法来设置和检索各自域范围内的属性。 存储在application对象中的属性可以被同一个WEB应用程序中的所有Servlet和JSP页面访问。 存储在session对象中的属性可以被属于同一个会话的所有Servlet和JSP页面访问。 存储在request对象中的属性可以被属于同一个请求的所有Servlet和JSP页面访问,例如使用PageContext.forward和PageContext.include方法连接起来的多个Servlet和JSP页面。 存储在pageContext对象中的属性仅可以被当前JSP页面的当前响应过程中调用的各个组件访问,例如,正在响应当前请求的JSP页面和它调用的各个自定义标签类。 PageContext类中还提供了对各个域范围的属性进行统一管理的方法,以简化对各个域范围内的属性的访问。,访问各个域范围中的属性(续),setAttribute方法 public void setAttribute(java.lang.String name,java.lang.Object value) public void setAttribute(java.lang.String name, java.lang.Object value,int scope) 常量 PageContext.APPLICATION_SCOPE PageContext.SESSION_SCOPE PageContext.REQUEST_SCOPE PageContext.PAGE_SCOPE getAttribute方法 public java.lang.Object getAttribute(java.lang.String name) public java.lang.Object getAttribute(java.lang.String name,int scope) removeAttribute方法 public void removeAttribute(java.lang.String name) public void removeAttribute(java.lang.String name,int scope) getAttributeNamesInScope方法 findAttribute方法 (*),JSP标签概念,JSP还提供了一种称之为Action的元素,在JSP页面中使用Action元素可以完成各种通用的JSP页面功能,也可以实现一些处理复杂业务逻辑的专用功能。 Action元素采用XML元素的语法格式,即每个Action元素在JSP页面中都以XML标签的形式出现。 JSP规范中定义了一些标准的Action元素,这些元素的标签名都以jsp作为前缀,并且全部采用小写,例如,、等等。,JSP标签内容,标签 标签 标签,标签,标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入。 语法: “ flush=“true|false“ / page属性用于指定被引入资源的相对路径,它也可以通过执行一个表达式来获得。 flush属性指定在插入其他资源的输出内容时,是否先将当前JSP页面的已输出的内容刷新到客户端。,标签与include指令的比较,标签是在当前JSP页面的执行期间插入被引入资源的输出内容,当前JSP页面与被动态引入的资源是两个彼此独立的执行实体,被动态引入的资源必须是一个能独立被WEB容器调用和执行的资源。include指令只能引入遵循JSP格式的文件,被引入文件与当前JSP文件共同合被翻译成一个Servlet的源文件。 使用标签和include指令都可以把一个页面的内容分成多个组件来生成,开发者不必再把页眉和页脚部分的相同HTML代码复制到每个JSP文件中,从而可以更轻松地完成维护工作,但是都应注意最终的输出结果内容应遵循HTML语法结构,例如,如果当前页面产生了、等标记,那么在被引入文件中就不能再输出、等标记。 标签对JSP引擎翻译JSP页面的过程不起作用,它是在JSP页面的执行期间才被调用,因此不会影响两个页面的编译。由于include指令是在JSP引擎翻译JSP页面的过程中被解释处理的,所以它对JSP引擎翻译JSP页面的过程起作用,如果多个JSP页面中都要用到一些相同的声明,那么就可以把这些声明语句放在一个单独的文件中编写,然后在每个JSP页面中使用include指令将那个文件包含进来。,标签与include指令的比较,标签使用page属性指定被引入资源的相对路径,而include指令使用file属性指定被引入资源的相对路径。 假设myweb应用程序的根目录下有一个a.jsp文件,其一般的访问路径形式为: http:/localhost:8080/myweb/a.jsp 在a.jsp页面中使用了如下语句引入b.jsp文件: 请问:这时候JSP引擎调用的b.jsp文件的完整URL路径为什么? 如果将a.jsp页面映射为如下地址: http:/localhost:8080/myweb/dir1/a.html 请问:这时候JSP引擎调用的b.jsp文件的完整URL路径为: http:/localhost:8080/myweb/b.jspf http:/localhost:8080/myweb/dir1/b.jspf,() (),标签,标签用于把请求转发给另外一个资源。 语法: “ / page属性用于指定请求转发到的资源的相对路径,它也可以通过执行一个表达式来获得。,RequestDispatcher.forward方法、PageContext.forward方法、标 签的区别 调用RequestDispatcher.for
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国潮设计所2025年工业产品设计趋势报告
- 情绪管理课2025年中小型企业员工心理健康促进报告
- 2026届黑龙江省鹤岗市绥滨五中学物理八上期末复习检测试题含解析
- 四川省成都简阳市三星中学2026届八年级物理第一学期期末质量检测试题含解析
- 河南省上蔡县2026届物理八年级第一学期期末经典模拟试题含解析
- 商铺租赁合同补充协议4篇
- 租赁物抵押合同3篇
- 县汽车租赁有限公司挂靠汽车租赁合同
- 美丽庭院认定管理办法
- 考勤管理系统管理办法
- 隐患排查治理奖励制度
- 学校食堂清洗消毒工作流程培训测试题及答案
- 计算机组装及维护试题库附带答案总结全面
- 武汉公积金基本知识培训课件
- 校园消防安全知识培训主要内容
- 校园垃圾清运应急预案演练(3篇)
- 楼盘销售技巧培训课件
- 总装工艺基础知识培训课件
- 2025年血透室透析液污染应急预案演练脚本
- 医院空气净化管理标准解析
- 风机噪声控制材料研究及使用方法
评论
0/150
提交评论