JSP页面结构组成
一、HTML标记符
二、变量和方法声明
三、Java程序片
四、Java表达式
五、JSP标记
六、注释
一、HTML标记符
省略不讲
二、变量和方法声明
1.在<%! %>
之间声明变量和方法
2.声明的变量对整个JSP页面内部有效
(JSP引擎为每个用户启动一个线程,并且这些线程共享JSP页面的成员变量,这些变量占有内存空间直到JSP引擎关闭才释放) (可以用于登记网站访问人数:您是第xx个访问本站的用户等)
3.定义的方法对整个JSP页面有效
4.如果不希望多个用户同时调用方法产生不良的影响,可以使用synchronized修饰方法,即:
<%! int count = 0;
synchronized void setCount() {
count++;
}
%>
如果两个线程同时调用count++的话,它自增完后先后进行了赋值,于是做了两次把count=1赋给count,最后count还是1而不是2,而使用synchronized修饰后,其他线程必须等待,直到正在调用方法的线程执行完才可以调用该方法
三.Java程序片
1.Java程序片写在<% %>
之间
2.程序片按顺序执行,程序片中的变量为局部变量
即每个用户线程对局部变量的操作不会影响到其他用户线程
四.Java表达式
1.<%=x %>
2.在JSP中表达式的值为字符串,因为由容器将表达式结果转换成字符串后才发给用户浏览器
五·.JSP标记
1.page指令标记
page指令标记用来定义整个JSP页面的一些属性和这些属性的值(对整个JSP页面有效)
[1]contentType属性
Tomcat需要负责告知用户浏览器用什么样的方式来处理所接受到的信息,如:
<% @ page contentType = "text/html;charset = UTF-8"%>
(用html解析器)
<% @ page contentType = "application/msword"%>
(用MS-Word应用程序)
注意:contentType只允许在一个JSP页面中使用一次,不能重复指定不同的属性值
[2]language属性
目前只能取Java
[3]import属性
导入Java类
[4]session属性
设置是否需要用session,默认是true
[5]buffer属性
<% @ page buffer = "24KB"%>
[6]autoFlush属性
是否在缓冲区满时自动刷新缓冲区
[7]isThreadSafe属性
设置是否可以多线程访问,默认true
[8]info属性
info的值是一个字符串,其目的是准备一个常用但可能要经常修改的字符串,如:
<% @ page info = "abc" %>
可以使用getServletInfo来获取info的值
2.include指令标记
[1]<% @ include file = "url" %>
[2]作用是在出现该指令的位置静态插入一个文件
所谓静态插入,就是将当前JSP页面和插入的文件合并成一个新的JSP页面。因此要保证新合成的页面符合JSP的语法规则,如一个的contentType值是application,另一个是text那么合并后就会因为重复设定了不同的属性值而出现语法错误
3.include动作标记
[1]<jsp:include page = "url"/>
[2]include动作标记是在JSP运行时才处理文件,而include指令是在编译阶段就处理的文件
4.param动作标记
<jsp: param name = "" value = "">
与jsp:include一起使用时可以将值传递到要加载的文件中去
5.forward动作标记
[1]<jsp:forward page = "url"/>
[2]从该指令处停止当前页面的执行,转向page指定的页面
[3]转向后,浏览器地址栏仍然是转向前的地址,用户刷新后会重新执行转向前的JSP页面
6.注释
注释分两种:
1.HTML注释
<!-- 注释内容 -->
JSP引擎把HTML注释交给用户,因此用户通过浏览器查看JSP源文件可以看到
2.JSP注释
<%-- 注释内容 --%>
JSP引擎忽略JSP注释,即在编译JSP页面时忽略JSP注释,所有用户看不到