1、第4章 JSP基本语法一、一、JSP基本元素基本元素 n一个完整的JSP程序一般包含JSP代码和HTML代码两部分,JSP代码嵌入在HTML代码中间。nJSP代码一般指Java程序片和JSP标签。n一个JSP页面可由以下四种元素构成:q模板元素q脚本元素q指令元素q动作元素二、模板元素模板元素主要指普通HTML标签、HTML注释等n基本标签基本标签q、-、n字符格式化字符格式化q、n常用表单元素常用表单元素q单行文件本框(“text”)q密码框(“password”)q单选按钮(“radio”)q复选按钮(“checkbox”)q重置按钮(“reset”)q提交按钮(“submit”)q文本域
2、()n表格表格q、详见“HTML主要标签及含义”:http:/ nJSP脚本元素是用来嵌入Java代码的n主要包括声明、表达式、Scriptlet三种。声明 n声明是指在JSP程序中定义变量和方法,声明后的变量和方法可以在JSP页面的任意地方使用。n声明放在“”标记符号间,使用格式如下:如:n说明:说明:”之间定义的变量和方法是全局(静态)全局(静态)的;多个用户请求同一个JSP页面时,各用户共享共享成员变量(的值)。表达式n表达式是获取变量的值或方法的返回值,并把结果在JPS页面上输,表达式在页面的位置即是结果输出位置。n在“”之间插入表达式,使用格式如下:如:/获得变量i的值 /获得方法的
3、返回值n说明:说明:在之间不可插入语句,表达式后没有“;”;表达式必须能求值,其值由服务器负责计算,将计算结果以字符串的形式返回并插入到JSP页面的相应位置。表达式示例 Sin(0.9)除以3等于 3的平方是:12345679乘72等于 5的平方根等于 99大于100吗?回答:100%程序段:ScriptletnScriptlet即是Java程序片段程序片段,它可以包含任意的Java代码,实现复杂的操作和控制。n在“”之间插入Java程序片段,使用格式如下:如:%int s=0;for(int i=0;in说明:说明:(1)一个JSP页面可以有许多Java程序片,JSP引擎顺序执行这些程序片。
4、可以把一个程序片拆分成几个更小的程序片,然后在这些小的程序片之间插入JSP页面的一些其他标记元素。(2)”之间定义的变量和方法是局部(动态)局部(动态)的;多个用户请求同一个JSP页面时,各用户间没联系没联系(分别拥有各自的局部变量)。程序段Scriptlet示例%for(int i=0;i 你好你好 你好 你好 声明中定义的变量是全局变量,运行程序,i的值不断增加 您是第 个访问本站的客户。程序片中定义的变量是局部变量,每次运行,i总是1您是第 个访问本站的客户。全局变量与局部变量的对比:计数器程序课堂练习n求110的平方及平方根(求平方根的方法:Math里的sqrt()方法)。并在浏览器中
5、以表格的形式输出。简单表格示例:这是一行一列 这是一行二列 这是二行一列 这是二行二列 四、指令元素nJSP指令的主要作用是和JSP引擎之间进行沟通,JSP指令发送消息到服务器端,并不向客户端产生任何输出。所有的指令都在JSP整个文件范围内有效。n在“”之间插入JSP指令,使用格式格式为:n说明:说明:属性值总是用双引号或单引号括起来;属性之间用空格分隔,不需要任何标点。nJSP中主要有以下3种指令标签:page指令 include指令 taglib指令Page指令 n在JSP页面中,可以通过页面指令page来定义整个JSP页面的属性,通过这个指令定义的属性会对该JSP文件以及静态包含进来的页
6、面起作用。n使用格式为:npage指令可以设置的属性有:import、contentType、isThreadSafe、session、buffer、autoflush、extends、info、errorpage、isErrorpage、language、pageEncoding。/各属性含义见书p87page指令n说明:说明:qpage指令可放在JSP的文件的任何地方,但为了增加程序的可读性,习惯上放置在页面的前面;qpage指令作用于整个JSP页面,包括静态的包含文件;但是指令不能作用于动态的包含文件q可以在一个页面中用上多个page指令,但其中的属性只能用一次,有个例外是import属
7、性,可以出现多次,用于导入多个Java类。page指令属性值import属性import属性导入JSP页面中使用的Java类,一个import属性可以导入多个Java类,中间用逗号隔开。例如:上述代码也可以写成:下面的包在JSP编译时已经导入了,所以就不需要再指明了:java.lang.*javax.servlet.*javax.servlet.jsp.*javax.servlet.http.*page指令属性值ncontentType属性qcontentType属性指定返回浏览器的内容类型属性值可以是text/plain(纯文本文件)、text/html(纯文本的HTML页面)、applic
8、ation/x-msexcel(Excel文件)、application/x-msword(Word文件)qcontentType属性还可以指定返回浏览器的内容的字符编码格式。可以是ISO8859-1(英文,默认),或GB2321(中文)q例如,如果需要在返回浏览器的HTML页面中使用中文字符,可以使用下列page指令:page指令属性值nerrorPage属性qerrorPage属性指定错误或异常处理页面,当页面执行出现异常或错误时,浏览器显示该属性指定的页面。例如:nisErrorPage属性q指定当前页面是否是异常处理页面,值为true或falsepage指令属性值npageEncodi
9、ng属性q指定JSP页面的字符编码,默认是ISO-8859-1,若要正常显示汉字,通常指定为:GB2312或GBKqpageEncoding和contentType的区别与联系:qpageEncoding是jsp文件本身的编码;contentType的charset是指服务器发送给客户端时的内容编码,它们的预设都是 ISO8859-1.而随便设定了其中一个,一般另一个就跟着一样了。若都设置了,在设置JSP源文件字符集时,优先级为 pageEncoding contentType.设置响应输出的字符集时,优先级为 contentType pageEncoding.示例:info属性 此页面信息如
10、下:%String s=getServletInfo();out.print(+s);%info属性:一个字符串,常用于显示JSP页面的版本作者等信息,可使用getServletInfo()方法获得课堂练习n在程序片中设置数组越界异常,在页面出现异常或错误时,跳转到errorPage指定的错误页面。nerrorPage页面的输出内容为“数组下标越界了,请检查!”,并显示当前的日期。include指令 ninclude指令允许在JSP页面内某处静态嵌入一个文件,包含是在JSP页面被转译成Servlet时进行的,文件合并后被编译成一个.class文件,静态嵌入后包含与被包含文件视为一体。如主体文件
11、的page指令对被包含文件的约束也是有效的,主体文件也可使用被包含文件中的变量。n格式为:如:。n一般将一个网站各个页面相同的部分(如导航条、页眉页脚等)写成单独的文件,然后静态include进各个页面,以减少重复代码。include指令n说明:说明:q一定要先写好被嵌入的文件,否则主体程序的编译不能被通过,所要嵌入的文件可以是文本、HTML、JSP等。qrelativeURL这个路径名一般来说是指相对路径,不要端口、协议、域名,如:“error.jsp”、“/files/header.html”、“/test/data.jsp”;q包含文件中不再使用、标记,这些标记可能会影响在原JSP文件中
12、同样的标记,这样做有时会导致错误。课堂练习n创建一个html文件,内容及输出如下图。另创建多个JSP页面,分别包含该html文件,使得html文件的内容出现在每个JSP页面的顶部。欢迎来到信息职业技术学院!用户名:密码:taglib指令ntaglib指令用于引入JSP页面中需要使用的标签库的定义,以便在页面中使用标签库中定义的标签n使用格式:/uri用来表示标签描述符,也就是告诉容器怎么找到标签描述文件和标签库,prefix定义了在jsp页面里面要引用这个标签时的前缀。例如:五、动作元素 nJSP动作元素在用户请求阶段执行。利用JSP动作元素可以动态地插入文件、重用JavaBean组件、进行页
13、面转向、为Java插件生成HTML代码等。nJSP动作元素是完全基于XML语法的,它采用严格的XML标签语法来表示,格式为:或 JSP动作元素nJSP规范中定义了一系列的动作元素,常用的动作元素有:q 静态或动态包含一个外部文件。q 请求转到一个新的页面。q 在浏览器中播放或显示一个对象实例,如Applet或JavaBean。q 为其他标签提供附加信息。q 实例化或查找一个JavaBean。q 设置JavaBean的属性。q 输出某个JavaBean的属性。元素 n:该标签告诉JSP页面动态包含一个文件,该文件可以是一个静态的或者动态的文件。n若被包含文件是静态的,那么会把被包含文件的内容加到
14、JSP文件中去;若文件是动态的,那么被包含文件会先被执行,然后把结果加入到JSP文件中去。还可以用向被包含的动态文件传递参数名和参数值。n的使用格式为:q不带参数格式不带参数格式jsp:include page=fileName|flush=true|false/q带参数格式带参数格式元素n说明:说明:page的属性值fileName为一相对路径,或者是代表相对路径的表达式。flush的属性值为“true”表示缓冲区满时会被清空,它默认值是false,一般使用flush为true。是以“名值”对的形式为其他标签提供附加信息,它不能单独使用,一般和、一起使用。子句能传递一个或多个参数值给动态文件
15、。其中,name指定参数名,value指定参数值。若要传递多个参数,则可以使用多个。示例:我是主文件 jsp:param name=num value=/这里是主文件的其他内容 我是子文件 这里是子文件,我得到的参数值为:主文件主文件子文件子文件运行结果:静态加载和动态加载区别:指令标签include是静态包含,被包含文件是在编译时插入JSP页面,然后一起被JSP容器编译生成一个一个ServletServlet,动作标签是动态包含,是在JSP页面被请求时,主文件和被包含文件分别被JSP容器编译,生成两个两个ServletServlet,然后将被包含文件的Servlet调入到主文件的Servle
16、t中。指令标签在编译时编译时就将子文件载入;动作标签在运行时运行时才将子文件载入;课堂练习na.jsp中使用include动作标签加载b.jsp,加载时向b.jsp传送某学生的姓名、学号、年龄,b.jsp获取并显示这些数据元素 n:从该指令处停止停止当前页面的执行,而转向另一个JSP页面。n该元素将客户端发出的请求(request),从一个JSP页面转交给另一个页面(可以是一个 HTML文件、JSP 文件、PHP文件、甚至可以是一个Java程序段)。注意:“标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象。“与的区别”:forward标签之后的代码,将不能执行,而inc
17、lude在执行完被包含文件后,还会回主文件继续执行.元素n使用格式格式为:q不带参数格式不带参数格式jsp:forward page=fileName|/q带参数格式带参数格式jsp:forword page=fileName|q其中:page的属性值fileName为一相对路径,或者是代表相对路径的表达式;参数被发送到跳转后的动态文件。课堂练习n理解教材p95页:例4-11、例4-12n练一练 c.jsp使用forward动作标签转向d.jsp,转向时向d.jsp传送两个整数。在d.jsp中获取这两个整数,并计算其加、减、乘、除元素 n:插入一个applet或Bean,必要的话还要下载一个J
18、ava插件用于执行它。n一般,元素会指定对象是Applet还是Bean,也会指定class的名字,还有位置,另外还会指定将从哪里下载这个Java插件。n使用格式格式为:text message for user 元素n说明:属性type描述插件将执行的对象的类型,可以为bean或applet,必须指定。属性code描述插件将执行的java类文件的名称,在名称中必须包含扩展名,且此文件必须在用“codebase”属性指明的目录下。属性codebase描述包含插件将运行的java类的目录或指相对这个目录的路径。描述插件不能启动时,显示给用户的信息。理解教材理解教材p98页:例页:例4-13六、注释六、注释nHTML注释:q这种注释发送到客户端,但不在浏览器显示;查看源代码可以看到。nJSP注释:q这种注释发只能在原始JSP文件中看到,JSP引擎忽略此注释,因此在JSP编译成的Servlet中看不到。n脚本注释:Java语言的注释qq不仅在原始JSP文件中可看到,而且在JSP编译成的Servlet中也可看到,但不发往客户端。