首页 南邮JSP程序设计教程(第3章)

南邮JSP程序设计教程(第3章)

举报
开通vip

南邮JSP程序设计教程(第3章)JSP程序设计教程第3章JSP语法第3章JSP语法3.1了解JSP的基本构成3.2JSP的指令标识3.3JSP的脚本标识3.4JSP的注释3.5动作标识√√√√√JSP页面的基本构成今天是:3.1了解JSP的基本构成在上面的代码中,并没有包括JSP中的所有元素,但它仍然构成了一个动态的JSP程序。访问包含了该代码的JSP页面后,将显示用户访问该页面的当前时间。暂且不对其功能实现进行讲解,先来介绍该页面的组成元素。3.1了解JSP的基本构成3.1.1JSP中的指令标识3.1.2HTML标记语言3.1.3嵌入的Java...

南邮JSP程序设计教程(第3章)
JSP程序设计教程第3章JSP语法第3章JSP语法3.1了解JSP的基本构成3.2JSP的指令标识3.3JSP的脚本标识3.4JSP的注释3.5动作标识√√√√√<%@pagelanguage="java"contentType="text/html;charset=gb2312"%><%@pageimport="java.util.Date"%>JSP页面的基本构成
<%Stringtoday=newDate().toLocaleString();%>今天是:<%=today%>
3.1了解JSP的基本构成在上面的代码中,并没有包括JSP中的所有元素,但它仍然构成了一个动态的JSP程序。访问包含了该代码的JSP页面后,将显示用户访问该页面的当前时间。暂且不对其功能实现进行讲解,先来介绍该页面的组成元素。3.1了解JSP的基本构成3.1.1JSP中的指令标识3.1.2HTML标记语言3.1.3嵌入的Java代码片段3.1.4JSP表达式√√√√3.1.1JSP中的指令标识利用JSP指令可以使服务器按照指令的设置来执行动作和设置在整个JSP页面范围内有效的属性。3.1.2HTML标记语言HTML标记在JSP页面中作为静态的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 ,浏览器将会识别这些HTML标记并执行。在JSP程序开发中,HTML标记语言主要负责页面的布局、设计和美观,可以说是网页的框架。3.1.3嵌入的Java代码片段嵌入到JSP页面中的Java代码,在客户端浏览器中是不可见的。嵌入的Java代码需要被服务器执行,然后由服务器将执行结果与HTML标记语言一同发送给客户端进行显示。通过向JSP页面中嵌入Java代码,可以使该页面生成动态的内容。3.1.4JSP表达式JSP表达式主要用于数据的输出。它可以向页面输出内容以显示给用户,还可以用来动态地指定HTML标记中属性的值。3.2JSP的指令标识指令标识在客户端是不可见的,它是被服务器解释并被执行的。通过指令标识可以使服务器按照指令的设置来执行动作和设置在整个JSP页面范围内有效的属性。指令通常以“<%@”标记开始,以“%>”标记结束,3种指令的通用格式如下:<%@指令名称属性1="属性值"属性2="属性值"…%>3.2JSP的指令标识3.2.1使用page指令3.2.2使用include指令3.2.3使用taglib指令√√√3.2.1使用page指令page指令即页面指令,可以定义在整个JSP页面范围内有效的属性。<%@pageattribute1="value1"attribute2="value2"…%>例如,在页面中正确设置当前页面响应的MIME类型为text/html,如果MIME类型设置不正确,则当服务器将数据传输给客户端进行显示时,客户端将无法识别传送来的数据,从而不能正确地显示内容。3.2.1使用page指令Page指令中除import属性外,其他属性只能在指令中出现一次。<%@page[language="java"][contentType="mimeType;charset=CHARSET"][import="{package.class|pageage.*},…"][extends="package.class"][session="true|false"][buffer="none|8kb|sizekb][autoFlush="true|false"][isThreadSafe="true|false"][info="text"][errorPage="relativeURL"][isErrorPage="true|false"][isELIgnored="true|false"][pageEncoding="CHARSET"]%>虽然Page指令具有如此多的属性,但在实际编程过程中,并不是每个属性都必须一一列出,其中很多属性可以忽略,此时Page指令将使用这些属性的默认值来设置JSP页面3.2.1使用page指令language属性:设置当前页面中编写JSP脚本使用的语言,默认值为java,例如:<%@pagelanguage="java"%>contentType属性:设置页面响应的MIME类型,通常被设置为text/html,以及设置JSP字符的编码,默认的编码为ISO-8859-1。例如:<%@pagecontentType="text/html;charset=gb2312"%>import属性:在Page指令中可多次使用该属性来导入多个包。例如:<%@pageimport="java.text.*"%>或者通过逗号间隔,来导入多个包。<%@pageimport="java.util.*,java.text.*"%>3.2.1使用page指令extends属性:用于指定将一个JSP页面转换为Servlet后继承的类。在JSP中通常不会设置该属性,JSP容器会提供继承的父类。并且如果设置了该属性,一些改动会影响JSP的编译能力。session属性:默认值为true,表示当前页面支持session,设为false表示不支持session。buffer属性:用来设置out对象(JspWriter类对象)使用的缓冲区的大小。autoFlush属性:默认值为true,表示当缓冲区已满时,自动将其中的内容输出到客户端。如果设为false,则当缓冲区中的内容超出其设置的大小时,会产生溢出异常。3.2.1使用page指令isThreadSafe属性:默认值为true,表示当前JSP页面被转换为Servlet后,会以多线程的方式来处理来自多个用户的请求;如果设为false,则转换后的Servlet会实现SigleThreadModel接口,该Servlet将以单线程的方式来处理用户请求,即其他请求必须等到前一个请求处理结束。info属性:该属性可设置为任意字符串,如当前页面的作者或其他有关的页面信息。可通过Servlet.getServletInfo()方法来获取设置的字符串。例如:<%@pageinfo="Thisisindex.jsp!"%><%=this.getServletInfo()%>访问页面后,将显示:Thisisindex.jsp!3.2.1使用page指令errorPage属性:该属性用来指定一个当前页面出现异常时所要调用的页面。isErrorPage属性:将该属性值设为true,此时在当前页面中可以使用exception异常对象。若在其他页面中通过errorPage属性指定了该页面,则当前者出现异常时,会跳转到该页面,并可在该页面中通过exception对象输出错误信息。isELIgnored属性:使JSP容器忽略表达式语言“${}”。其值只能为true或false。设为true,则忽略表达式语言。pageEncoding属性:该属性用来设置JSP页面字符的编码。默认值为ISO-8859-1。3.2.2使用include指令该指令用于在当前的JSP页面中,在当前使用该指令的位置嵌入其他的文件,如果被包含的文件中有可执行的代码,则显示代码执行后的结果。该指令的使用格式如下:file属性:该属性指定被包含的文件,该属性不支持任何表达式,也不允许通过如下的方式来传递参数。<%@includefile="文件的绝对路径或相对路径"%><%@includefile="welcome.jsp?name=yxq"%>3.2.2使用include指令include指令用例:页尾:end.jsp内容显示区:main.jsp侧栏:left.jspLOGO图片区:top.jsp<%@pagecontentType="text/html;charset=gb2312"%><%@includefile="top.jsp"%><%@includefile="end.jsp"%>
<%@includefile="side.jsp"%>在这里对内容显示区进行编码
3.2.3使用taglib指令通过使用taglib指令,开发者就可以在页面中使用基本标识或自定义的标识来完成特殊的功能。uri属性:该属性指定了标签描述符,该描述符是一个对标签描述文件(*.tld)的映射。prefix属性:该属性指定一个在页面中使用由uri属性指定的标签库的前缀。开发者可通过前缀来引用标签库中的标签。以下为一个简单的使用JSTL的代码:<%@tagliburi="tagURI"prefix="tagPrefix"%><%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%>该段代码通过标签将hello值赋给了变量name。3.3JSP的脚本标识3.3.1JSP表达式(Expression)3.3.2声明标识(Declaration)3.3.3脚本程序(Scriptlet)√√√3.3.1JSP表达式表达式用于向页面中输出信息。特别注意:“<%”与“=”之间不要有空格。语句末尾没有分号JSP表达式在页面被转换为Servlet后,转换为了out.print()方法。<%=变量或可以返回值的方法或Java表达式%>3.3.1JSP表达式生成动态的链接地址,例如下面的代码:<%Stringname="www.xxx.com";%>用户名:<%=name%>动态指定Form表单处理页面,例如下面的代码:运行该段代码将显示:用户名:www.xxx.com<%Stringpath="welcome.jsp";%>">链接到welcom.jsp运行该段代码将生成下面的HTML代码:链接到welcome.jsp<%Stringname="logon.jsp";%>">运行该段代码将生成下面的HTML代码:JSP表达式可以应用到以下几种情况:向页面输出内容,例如下面的代码:为通过循环语句生成的元素命名,例如下面的代码:<%for(inti=1;i<3;i++){%>file<%=i%>:">
<%}%>运行该段代码将生成下面的HTML代码:file1:
file2:
3.3.1JSP表达式3.3.2声明标识(Declaration)在JSP页面中可以声明变量或方法,其声明格式为:说明:特别要注意,在“<%”与“!”之间不要有空格。在页面中通过声明标识声明的变量和方法,在整个页面内都有效,它们将成为JSP页面被转换为Java类后类中的属性和方法。并且它们会被多个线程即多个用户共享。生命周期从创建到服务器关闭后结束。<%!声明变量或方法的代码%><%!//声明标识中声明的变量intnum=0;//声明标识中声明的方法synchronizedvoidadd(){num++;}%>3.3.3脚本程序(Scriptlet)脚本程序是在JSP页面中使用“<%”与“%>”标记起来的一段Java代码。说明:在脚本程序中定义的变量在当前的整个页面内都有效,但不会被其他的线程共享,用户之间互不影响。变量在的所在页面关闭后就会被销毁。脚本程序的使用比较灵活,它所实现的功能是JSP表达式无法实现的。<%Java程序片段%>3.4JSP的注释3.4.1HTML中的注释3.4.2带有JSP表达式的注释3.4.3隐藏注释3.4.4脚本程序(Scriptlet)中的注释√√√√3.4.1HTML中的注释JSP文件是由HTML标记和嵌入的Java程序片段组成的,所以在HTML中的注释同样可以在JSP文件中使用。注释格式如下:3.4.2带有JSP表达式的注释在HTML注释中可以嵌入JSP表达式,注释格式如下:3.4.3隐藏注释隐藏注释,注释格式如下:<%--注释内容--%>使用该方法注释的内容,不仅在客户端浏览时看不到,而且即使是通过在客户端查看HTML源代码,也不会看到,所以安全性较高。3.4.4脚本程序(Scriptlet)中的注释//注释内容1.单行注释单行注释的格式如下:/*注释内容1注释内容2…*/2.多行注释多行注释的是通过“/*”与“*/”符号进行标记。为了程序代码的美观,习惯上在每行的注释内容前面加入一个“*”号。/**注释内容1*注释内容2*…*/3.4.4脚本程序(Scriptlet)中的注释3.提示文档注释该种注释会被Javadoc文档工具生成文档时所读取,文档是对代码结构和功能的描述。/**提示信息1提示信息2…*/3.4.4脚本程序(Scriptlet)中的注释在Eclipse开发工具中向创建的JSP文件输入下面的代码,然后将鼠标指针移动到指定的代码上,将会出现提示信息。<%!inti=0;/**@作者:YXQ@功能:该方法用来实现一个简单的计数器*/synchronizedvoidadd(){i++;}%><%add();%>当前访问次数:<%=i%>3.4.4脚本程序(Scriptlet)中的注释将鼠标指针移动到<%add();%>代码上,将出现下图如图所示的提示信息。3.5动作标识在JSP中提供了一系列的使用XML语法写成的动作标识,这些标识可用来实现特殊的功能。动作标识是在请求处理阶段按照在页面中出现的顺序被执行的,只有它们被执行的时候才会去实现自己所具有的功能。动作标识通用的使用格式如下:<动作标识名称属性1="值1"属性2="值2"…/>或<动作标识名称属性1="值1"属性2="值2"…><子动作属性1="值1"属性2="值2"…/>3.5动作标识√√√√√√√动作标识用于向当前的页面中包含其他(动态或者静态的)文件。或者向被包含的动态页面中传递参数:属性及子标识说明:page属性:该属性指定了被包含文件的路径,其值可以是一个代表了相对路径的表达式。flush属性:表示当输出缓冲区满时,是否清空缓冲区。默认值为false,通常情况下设为true。:可以向被包含的动态页面中传递参数。对包含文件的处理方式:包含静态文件:页面执行后,在使用了该标识的位置处将会输出这个文件的内容。包含动态文件:那么JSP编译器将编译并执行这个文件。与include指令之间的差异有4点:1.属性动作标识通过page属性来指定被包含的页面,该属性支持JSP表达式。include指令通过file属性来指定被包含的页面,它将file属性值看作一个实际存在的文件的路径,所以该属性不支持任何表达式。2.处理方式动作标识包含文件时处理过程:当标识被执行时,程序会将请求转发到被包含的页面,并将执行结果输出到浏览器中,然后返回包含页继续执行后面的代码。实质:服务器执行的是两个文件,所以JSP编译器会分别对这两个文件进行编译。include指令包含文件时处理过程:被包含的文件内容会原封不动地插入到包含页中使用该指令的位置,JSP编译器再对这个合成的文件进行翻译。实质:include指令将两个文件合成一个文件,然后JSP编译器只编译合成后的一个文件。3.包含方式动作标识动态包含:只有当动作标识被执行时,使用该识包含的目标文件才会被编译,否则被包含的文件不会被编译。适用范围:通常是来包含那些经常需要改动的文件。include指令静态包含:服务器执行的是将两个文件合成后由JSP编译器编译成的一个Class文件。适用范围:通常是用来包含内容固定不变的文件。4.对被包含文件的约定动作标识不用遵守包含与被包含文件HTML头部信息保持一致的约定。include指令必须遵守包含与被包含文件HTML头部信息保持一致的约定。动作标识用来将请求转发到另外一个JSP、HTML或相关的资源文件中。当该标识被执行后,当前的页面将不再被执行,而是去执行该标识指定的目标页面。如果转发的目标是一个动态文件,还可以向该文件中传递参数,使用格式如下:page属性:该属性指定了目标文件的路径。注意:请求被转向到的目标文件必须是内部的资源,即当前应用中的资源。若请求外部资源,则会报错,如下:错误提示:Therequestedresource(/http://localhost:8080/B/logon.jsp)isnotavailable子标识:用来向动态的目标文件中传递参数。重点提示标识实现的是请求的转发操作,而不是请求重定向。请求转发与重定向的区别:进行请求转发时,存储在request对象中的信息会被保留并被带到目标页面中;请求重定向是重新生成一个request请求,然后将该请求重定向到指定的URL,所以事先存储在request对象中的信息都不存在了。动作标识可以在JSP页面中创建一个Bean实例。标识被执行时,在scope属性指定的范围来查找指定的Bean实例如果该实例已经存在,则引用这个Bean,如果该实例不存在,则重新创建,并将其存储在scope属性指定的范围内。通过标识创建的Bean实例可以在脚本程序(Scriptlet)中应用。两种标识的使用方法:两种使用方法的区别:各属性的用法详解:1.id属性该属性指定一个变量,在所定义的范围内或脚本程序中将使用该变量来对所创建的Bean实例进行引用。2.type="数据类型"用于设置变量的类型。若session范围内,已经存在名为“us”的实例,则表示“us=(com.Bean.UserInfo)us”(必须是合法的类型转换)若指定的实例不存在将抛出“beanusnotfoundwithinscope”异常。3.scope属性该属性指定了所创建Bean实例的存取范围,省略该属性时的默认值为page。scope属性具有的可选值如下:page:所创建的Bean实例只能够在当前的JSP文件中使用,包括在通过include指令静态包含的页面中有效。request:所创建的Bean实例可以在请求范围内存取。请求范围:一个请求的生命周期是从客户端向服务器发出一个请求到服务器响应这个请求给用户后结束,所以请求结束后,存储在其中的Bean的实例也就失效了。通过request对象的getAttribute("id属性值")方法获取创建的Bean实例session:所创建的Bean实例的有效范围为session。什么是session?服务器为用户创建的一个对象,用于记录客户端与服务器端的连接信息,以保持用户连接,服务器通过session的ID值来区分其他的用户。针对某一个用户,在该范围中的对象可被多个页面共享。可以使用session对象的getAttribute(“id属性值”)方法获取存储在session中的Bean实例application:所创建的Bean实例的有效范围从服务器启动开始到服务器关闭结束。Application对象被多个用户共享。所有用户共享存储于该对象中的Bean实例。可以使用application对象的getAttribute("id属性值")方法获取存在于application中的Bean实例。4.class="package.className"该属性指定了一个完整的类名。通过class属性指定的类不能是抽象的,它必须具有公共的、没有参数的构造方法。在没有设置type属性时,必须设置class属性。若session范围内,不存在名为“us”的实例那么会通过new操作符实例化UserInfo类,并以“us”为实例名称存储到session范围内。5.class="package.className"type="数据类型"class属性与type属性可以指定同一个类。前提:假设UserBase类为UserInfo类的父类。首先创建了一个以type属性的值为类型,以id属性值为名称的变量us,并赋值为null;然后在session范围内来查找这个名为“us”的Bean实例,如果实例存在,则将其转换为type属性指定的UserBase类型并赋值给变量us;us为UserBase类型。如果实例不存在,那么将通过new操作符来实例化一个UserInfo类的实例并赋值给变量us;us为UserInfo类型。6.beanName="package.className"type="数据类型"beanName属性与type属性可以指定同一个类,前提:假设UserBase类为UserInfo类的父类。首先创建了一个以type属性的值为类型,以id属性值为名称的变量us,并赋值为null;然后在session范围内来查找这个名为“us”的Bean实例,如果实例存在,则将其转换为type属性指定的UserBase类型并赋值给变量us;us为UserBase类型。如果实例不存在,那么先通过instantiate()方法实例化UserInfo类,然后将其转换成UserBase类型后赋值给变量us;us为UserBase类型。将调用Bean中的setXxx()方法将请求中的参数赋值给由标识创建的JavaBean中对应的简单属性或索引属性。该属性用来指定一个存在于某个范围中的Bean实例。标识将会按照page、request、session和application的顺序来查找这个Bean实例,直到第一个实例被找到。若任何范围内不存在这个Bean实例,则会抛出异常。1.name属性要求请求中参数的名称和类型必须与Bean中属性的名称和类型一致property属性取值为“*”时,则request请求中所有参数的值将被一一赋给Bean中与参数具有相同名字的属性。如果请求中存在值为空的参数,那么Bean中对应的属性将不会被赋值为Null;Bean属性会保留原来或默认的值。如果Bean中存在一个属性,但请求中没有与之对应的参数,那么该属性同样不会被赋值为Null,Bean属性会保留原来或默认的值。2.property="*"如果property属性指定的Bean属性为userName,那么指定Bean中必须存在setUserName()方法,否则会抛出异常。3.property=“属性名"param属性指定一个request请求中的参数,property属性指定Bean中的某个属性。该种使用方法允许将请求中的参数赋值给Bean中与该参数不同名的属性。4.property=“属性名”param=“参数名"5.property=“属性名"value="值"value属性指定的值可以是一个字符串数值或表示一个具体值的JSP表达式或EL表达式。该值将被赋给property属性指定的Bean属性。注意:通常标识与标识一起使用,但这并不是绝对的。标识将会按照page、request、session和application的顺序来查找Bean实例,并返回第一个被找到的实例。【例】标识的使用<%@pageimport="com.bean.ShopCar"%><%//创建一个实例ShopCarcar=newShopCar();//将创建的JavaBean实例存在session范围内session.setAttribute("car",car);%>属性用来从指定的Bean中读取指定的属性值,并输出到页面中。该Bean必须具有getXxx()方法。1.name属性name属性用来指定一个存在某JSP范围中的Bean实例。2.property属性该属性指定了要获取由name属性指定的Bean中的哪个属性的值。的子标识,当使用标识加载Java小应用程序或JavaBean失败时,可通过标识向用户输出提示信息。加载JavaApplet小程序失败!使用标识可以在页面中插入JavaApplet小程序或JavaBean,它们能够在客户端运行。该标识会根据客户端浏览器的版本转换成HTML元素。}"/>][加载失败提示信息]>标识中的各属性的简要介绍如下表所示。当加载Java类文件失败时,用来显示给用户提示信息在该标识中可包含多个标识,用来向Applet或Bean中传递参数分别指定了NetscapeNavigator用户和InternetExplorer用户能够使用的JRE的下载地址nspluginurl和iepluginurl在浏览器中执行Applet或Bean时所需的JavaRuntimeEnvironment(JRE)的版本,默认值为1.1jreversion加载的Applet或Bean在屏幕或单元格中所留出的空间大小,hspace表示左右,vspace表示上下,它们不支持任何表达式hspace和vspace加载的插件对象在页面中显示时的高度和宽度,单位为像素。这两个属性值支持JSP表达式或EL表达式height和width加载的插件对象在页面中显示时的对齐方式。可选值为“bottom”、“top”、“middle”、“left”和“right”align指定预先加载的存档文件的路径,多个路径可用逗号进行分隔archive指定了加载的Applet或Bean的名称name默认值为当前访问的JSP页面的路径,该属性用来指定code属性指定的Java类文件所在的路径codebase指定了要加载的Java类文件的名称。该名称可包含扩展名和类包名,如“com.applet.MyApplet.class”code该属性指定了所要加载的插件对象的类型,可选值为“bean”和“applet”type说明属性
本文档为【南邮JSP程序设计教程(第3章)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
正方体
暂无简介~
格式:ppt
大小:585KB
软件:PowerPoint
页数:61
分类:
上传时间:2022-05-10
浏览量:0