Jsp基础-Jsp语法篇

一、Jsp主要包含三种指令:page指令(页面指令)、include指令、taglib指令。

二、page指令:可以定义在整个jsp页面范围内有效的属性,使用格式:<%@ page attribute1="value1" attribute2="value2"%>,下面是常用属性:

1、language属性:设置当前页面中编写jsp脚本使用的语言,默认为Java

写法:<%@ page language="java"%>

2、contentType属性:设置页面响应的MIME类型,通常被设置为text/html,默认编码为ISO-8859-1

写法:<%@ page contentType="text/html;charset=UTF-8"%>

3、import属性:类似于Java中的import语句,用来向jsp文件中导入需要用到的包,在page指令中可多次使用该属性来导入多个包。

写法:<%@ page import="java.util.* java.text.*"

在jsp中默认导入了以下包的内容:

java.lang.*

javax.servlet.*

javax.servlet.jsp.*

javax.servlet.http.*

补充:若要在页面中使用编写的javabean,也可通过import属性来导入。还可以通过动作标识来创建一个javaean实例进行调用

4、extends属性:用来指定将一个jsp页面转换成servlet后继承的类。

补充:在jsp中通常不会设置该属性,jsp容器会提供继承的父类,如果设置了该属性,一些改动会影响jsp的编译能力。

5、session属性:该属性默认值为true,表示当前页面支持session。

6、buffer属性:该属性用来设置out对象(jspwriter类对象)使用的缓冲区大小。若设置为none,表示不使用缓存,而直接通过PrintWriter对象进行输出;如果将该属性指定为数值,则输出缓冲区的大小不应小于该值,默认值为8KB。

7、autoflush属性:该属性默认值为true,表示当缓冲区已满时,自动将其中的内容输出到客户端。如果数值为false,则当缓冲区的内容超过其设置的大小时,会产生“jsp buffer overflow”溢出异常

8、isthreadsafe属性:默认值为true,表示当前jsp页面被转换成servlet后,会以多线程的方式来处理来自多个用户的请求,如果设置为false,则转换后的servlet会实现siglethreadmodel接口,该servlet将以单线程的方式来处理用户请求,即其他请求必须等待直到前一个请求处理结束。

9、info属性:可设置为任意字符串,如当前页面的作者或其他有关的页面信息。可通过servlet.getservletinfo()方法拉力获取设置的字符串。

写法:<%@ page info="this is index.jsp!"%> <%=servlet.getservletinfo()%>

10、errorpage属性:用来指定一个当前页面出现异常时多要调用的页面。如果属性值是以“/”开头的路径,则将在当前应用程序的根目录下查找文件,否则,价格能在当前页面的目录下查找文件。

11、iserrorpage属性:将该属性设置为true,此时在当前页面中可以使用exception异常对象。若在其他页面中通过errorpage属性指定了该页面,则当前者出现异常时,会跳转到该页面,并可在该页面中通过exception对象输出错误信息。相反,如果将该属性设置为false,则在当前页面中不能使用exception对象。该属性默认值为false.

补充:只有在指定的转到错误页面中设置iserrorpage属性为true,然后才能调用exception对象输出错误信息。使用方法exception.getmessage()

12、isELIgnored属性:通过该属性的设置可以使jsp容器忽略表达式语言“${}”,其值只能为true或false,设置为true,则忽略表达式语言。

13、pageEncoding属性:该属性用来设置jsp页面字符的编码,默认为“ISO-8859-1”。

三、include指令:该指令用于在当前的jsp页面中,在当前使用该指令的位置嵌入其他的文件,如果被包含的文件中有可执行的代码,则显示代码执行后的结果。

使用格式:<%@ include file="文件的绝对路径或相对路径"%>

file属性:用来指定被包含的文件,该属性不支持任何表达式。如果该属性值以“/”开头,那么指定的是一个绝对路径,在将当前应用的根目录下查找文件,如果是以文件名称或者文件夹名开头,那么指定的是一个相对路径,将在当前页面的目录下查找文件。

四、使用taglib指令:用来在页面中使用jsp的基本标识或自定义的标识来完成特殊的功能。

使用格式:<%@ taglib uri="tagURI" prefix="tagPrefix"%>

uri属性:制定了标签描述符,该描述符是一个对标签描述文件的映射。在tld标签描述文件中定义了该标签库中的各个标签名称,并为每个标签指定一个标签处理类。

prefix属性:该属性指定一个在页面中使用由uri属性指定的标签库的前缀。前缀不能命名为jsp、jspx、Java、javax、sun、servlt、sunw。

示例:<%@ taglib uri="http://java.sum.com/jsp/jst1/core" prefix="c"%>  

五、注释方式:

1、<%-- --%>

2、

六、动作标识:用来向当前的页面中包含其他的文件,可以是动态文件,也可以是静态文件。

使用格式:





page属性:该属性指定了被包含文件的路径,其值可以是一个代表了相对路径的表达式。当路径是以“/”开头是,则按照当前应用的路径查找这个文件;如果路径是以文件名或目录名称开头,那么将按照当前的路径来查找被包含的文件。

flush属性:表示当输出缓冲区满时,是否清空缓冲区。该属性值为boolean类型,默认值为false,通常设置为true。

子标识可以向被包含的动态页面中传递参数。

标识对包含的动态文件和静态文件的处理方式是不同的。如果被包含的是静态的文件,则页面执行后,在使用了该标识的位置处将会输出这个文件的内容。如果标识包含的是一个动态的文件,那么jsp编译器将编译并执行这个文件。不能通过文件的名称来判断该文件是静态还是动态的,标识会识别文件的类型。

动作标识与include指令都可用来包含文件。

七、与<%@include>的区别:

1、属性:include指令通过file属性来指定被包含的页面,include指令将file属性值看做一个实际存在的文件的路径,所以该属性不支持任何表达式。若在file中应用了jsp表达式,则会抛出异常。动作标识通过page属性来指定被包含的页面,该属性支持jsp表达式。

2、处理方式:使用include指令被包含的文件,他的内容会原封不动的插入到包含页中使用该指令的位置,然后jsp编译器再对这个合成的文件进行翻译。所以在一个jsp页面中使用include指令来包含另一个jsp页面,最终编译后的文件只有一个。

使用动作标识包含文件时,当该标识被执行时,程序会将请求转发到(转发而非重定向)被包含的页面,并将执行结果输出到浏览器中,然后返回包含页继续执行后面的代码。因为服务器执行的是两个文件,所以jsp编译器会分别对两个文件进行编译。

3、包含方式:使用include指令包含文件,最终服务器执行的是将两个文件合成后由jsp编译器编译成的一个class文件,所以被包含文件的内容应是固定不变的,若改变了被包含的文件,则主文件的代码就发生了改变,因此服务器会重新编译主文件。include指令的这种包含过程称为静态包含。

使用动作标识通常是来包含那些经常需要改动的文件。此时服务器执行的是两个文件,被包含的文件的改动不会影响到主文件,新词服务器不会对主文件重新编译,而只需重新编译被包含的文件即可。而对被包含文件的编译是在执行时才进行的,也就是说,只有当动作标识被执行时,使用该标识包含的目标文件才会被编译,否则被包含文件不会被编译,所以这种包含过程称为动态包含。

八、:用来将请求转发到另外一个jsp、html或相关的资源文件中。当该标识被执行后,当前的页面将不再被执行,而是去执行该标识指定的目标页面。

补充:标识实现的是请求的转发操作,而不是请求重定向。他们之间的 一个区别就是:进行转发请求时,存储在request对象中的信息会被保存并被带到目标页面中;而请求重定向是重新生成一个request请求,然后将该请求重定向到指定的URL,所以事先存储在request对象中的信息都不存在了。

你可能感兴趣的:(JSP,网页开发)