系列文章目录
JSP入门之JSP语法
目录
一、JSP页面的基本结构
在传统的HTML页面文件中加入Java程序片和JSP标记就构成了一个JSP页面。一个JSP页面可由5中元素组合而成:
①普通的HTML标记和JavaScript标记(<script />)
②JSP标记,如指令标记、动作标记(<%@ %>)
③变量和方法的声明(<%! %>)
④Java程序片(<% %>)
⑤Java表达式(<%= %>)
二、声明变量和定义方法
1.声明变量
<%! %>之间声明的变量在整个JSP页面内都有效,与<%! %>标记符在JSP页面中所在的书写位置无关。Tomcat服务器将JSP页面转译成Java文件时将<%! %>标记符之间声明的变量作为类的成员变量,这些变量占有的内存空间知道Tomcat服务器关闭才释放。
代码如下(示例):
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body bgcolor="yellow"> <%! int i = 0; %> <% i++; %> <p style = "font-family:宋体;font-size:36px;color:green"> 您是第<%= i%>个访问本站的用户。 </p> </body> </html>
2.定义方法和类
代码如下(示例):
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body bgcolor="yellow"> <p style = "font-family:宋体;font-size:36px;color:green"> <%! double multi(double x, double y){ return x * y; } double div(double x, double y){ return x / y; } class Circle{ double r; double getArea(){ return 3.1415926 * r * r; } } %> <% double x = 8; double y = 16; out.print("调用multi方法计算" + x + "与" + y + "的积:<br>"); out.print(multi(x, y)); out.print("<br>调用div方法计算" + x + "除以" + y + "的商:<br>"); out.print(div(x, y)); String s = String.format("小数点保留3位:%10.3f",div(x, y)); out.println(s); Circle circle = new Circle(); circle.r = 3.6; out.print("<br>半径是" + circle.r + "的圆面积:" + circle.getArea()); %> </p> </body> </html>
三、Java程序片
可以在<% %>之间插入Java程序片。在程序片中声明的变量称作JSP页面的局部变量。局部变量的有效范围与其声明的位置有关,即局部变量在JSP页面后继的所有程序片以及表达式部分内都有效。Tomcat服务器将JSP页面转译成Java文件时,将各个程序片的这些变量作为类中某个方法的变量,即局部变量。
1.用syncchronized方法修饰成员变量
代码如下(示例):
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body bgcolor="yellow"> <p style = "font-family:宋体;font-size:36px;color:green"> <%! int count = 0; synchronized void setCount(){ count++; } %> <% setCount(); out.println("您是第" + count + "个访问本站的客户"); %> </p> </body> </html>
四、Java表达式
可以在<%= %>之间插入一个可求值的表达式(注意:不可插入语句)。表达式的值由服务器端负责计算,并将计算结果用字符串形式发送到用户端显示。
代码如下(示例):
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body bgcolor="yellow"> <% int x = 12, y = 9; %> <p style = "font-family:宋体;font-size:36px;color:green"> 计算表达式x+y+x%y,即<%= x%> + <%= y%> + <%= x%> % <%= y%>的值:<%= x+y+x%y%> <br>计算表达式x>y,即<%= x%> > <%= y%>的值<%= x > y%> <br>计算表达式sin(<%= Math.PI / 2%>)的值:<%= Math.sin(Math.PI / 2)%> <br> <% if(x - y >= 0){ %> 如果<%= x%>大于<%= y%>,计算<%= x%> - <%= y%>即 <%= x - y%>的平方根%> <%= Math.sqrt(x - y)%> <% } %> </p> </body> </html>
五、JSP中的注释
1.HTML注释
<!--注释内容-->,JSP引擎把HTML注释交给用户,因此用户可以通过浏览器查看JSP页面的源文件时,能够看到HTML注释。
1.JSP注释
<%--注释内容-->,Tomcat服务器忽略JSP注释,即在编译JSP页面时忽略JSP注释。
六、JSP指令标记
1.page指令标记
page指令用来定义整个JSP页面的一些属性和这些属性的值,属性值用单引号或双引号括起来。
page指令的作用对整个JSP页面有效,与其书写位置无关。
①contentType属性
<%@ page contentType = "text/html"%>
通过设置contentType属性的值让浏览器可以使用相应的解析器来解析JSP页面。
如果不使用page指令为contentType指定一个值,那么contentType属性默认值时"text/html"。JSP页面使用的page指令只能为contentType设置一个值,不允许两次使用page指令给contentType属性指定不同的值。
contentType的附加属性charset的值时通知用户浏览器用怎样的编码解析收到的字符。
②pageEncoding属性
<%@ page pageEncoding = "utf-8"%>
pageEncoding属性的默认值是UTF-8。需要注意的是,和contentType的附加属性charset的值意义不同,pageEncoding属性值是定义JSP页面使用的编码,即是告诉Tomcat服务器解析器用怎样的编码解析JSP页面中的字符。
③language属性
<%@ page language = "java"%>
language属性定义JSP页面使用的脚本语言,该属性的值目前只能取"java".
langueage属性的默认值是"java",即如果在JSP页面中没有使用page指令指定该属性的值,那么JSP默认language的值为默认值。
④import属性
<%@ page import = "java.util.*"%>
import属性的作用是为JSP页面引入Java运行环境提供的包中的类,这样就可以在JSP页面的程序片部分、变量及方法定义部分以及表达式部分使用包中的类。
⑤session属性
session属性用于设置是否需要使用内置的session对象。session的属性值可以是true或false。seeion属性的默认值是true。
⑥buffer属性
<%@ page buffer = "24kb"%>
buffer属性用来指定out设置的缓冲区的大小或不适用缓冲区。buffer属性的默认值是8kb。buffer属性可以取值"none",即设置out不使用缓冲区.
⑦autoFlush属性
autoFlush属性指定out的缓冲区被填满是,缓冲区是否自动刷新。autoFlush可以取值true或false。autoFlush属性的默认值是true。当autoFlush属性取值false时,如果out的缓冲区填满,就会出现缓存溢出异常。当buffer的值时"none"时,autoFlush的值就不能设置成false。
⑧isThreadSafe属性
isThreadSafe属性用来设置访问JSP页面是否线程安全。isTreadSafe的属性值可取true或false。当isThreadSafe属性值设置为true时,JSP页面能同时响应多个用户的请求;当isThreadSafe属性值设置成false时,JSP页面同一时刻只能响应一个用户的请求,其他用户必须排队等待。isThreadSafe属性的默认值时true。
⑨info属性
<%@ page info = "常用的字符串"%>
info属性的属性值是一个字符串,其目的是为JSP页面准备一个常用但可能要经常修改的字符串。
2.include指令标记
<%@ include file = "文件的URL"%>
如果需要在JSP页面内某处整体嵌入一个文件,就可以考虑使用include指令标记。
include指令标记采用的是静态嵌入,所谓静态嵌入,就是当前JSP页面和嵌入的文件合并成一个新的JSP页面,然后Tomcat服务器再将这个新的JSP页面转译成Java文件。需要注意的是嵌入的文件的contentTpye的值要与当前JSP页面的contentType的值相同。
七、JSP动作标记
1.include动作标记
<jsp:include page = "文件的URL">
param 子标记
</jsp:include>
需要注意的是,当include动作标记不需要param子标记时,必须要去掉param子标记。
当Tomcat服务器根据JSP页面生成Java文件时,不把JSP页面中动作指令include所包含的文件与原JSP页面合并为一个新的JSP页面,而是告诉Java解释器,这个文件在JSP运行时才包含进来。include动作标记实在JSP页面运行时才处理文件,被处理的文件在逻辑和语法上独立于当前JSP页面。
2.param动作标记
<jsp:param name = "参数" value = "参数的值"/>
param标记以"名字-值"对的形式为其他标记提供附加信息,param标记不能独立使用,须作为jsp:include、jsp:forward标记的子标记来使用。
3.forward动作标记
<jsp:forward page = "要转向的页面">
param 子标记
</jsp:forward>
forward指令的作用是:从该指令处停止当前页面的执行,而转向执行page属性指定的JSP页面。需要注意的是,当forward动作标记不需要param子标记时,必须要去掉param子标记。
需要注意的是,当前页面使用forward动作标记转向后,尽管用户看到了转向后的页面的效果,但浏览器地址栏中显示的仍然十四转向前的JSP页面的URL地址。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了JSP语法,大家要想继续深入了解可以去看看zw的博客