网页模板
<%@page contentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> </BODY> </HTML> |
第一行的代码称为page指令,这里用它来改变JSP文件的编码,消除中文乱码的隐患。它还有其它的用途。
代码块
<%@page contentType="text/html;charset=gb2312" import="java.util.Date"%> <HTML> <HEAD> <TITLE>代码块</TITLE> </HEAD> <BODY> <% Date d = new Date(); System.out.println(d.toLocaleString()); %> </BODY> </HTML> |
注意这里的page指令,里面用到了import语句,用来导入java类。
表达式
<%@page contentType="text/html;charset=gb2312" import="java.util.Date"%> <HTML> <HEAD> <TITLE>表达式</TITLE> </HEAD> <BODY> <% Date d = new Date(); %> 当前时间:<FONT COLOR="RED"><%=d.toLocaleString()%></FONT> </BODY> </HTML> |
表达式是在页面上输出数据的最常用方式,也是最推荐的方式,它将HTML代码与Java代码进行了分离,例如:
<%@page contentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>表达式的使用</TITLE> </HEAD> <BODY> <TABLE border="1"> <% for(int i=0;i<9;i++) { %> <tr> <% for(int j=0;j<9;j++) { %> <td><%=i*j%></td> <% } %> </tr> <% } %> </TABLE> </BODY> </HTML> |
全局变量
<%@page contentType="text/html;charset=gb2312" import="java.util.Date"%> <HTML> <HEAD> <TITLE>全局变量</TITLE> </HEAD> <BODY> <%! Date d = new Date(); %> 当前时间:<FONT COLOR="RED"><%=d.toLocaleString()%></FONT> </BODY> </HTML> |
带有!的变量声明,这个变量就是全局变量,它在服务器中只有一个,不会多次生成,请观察上例页面,无论是刷新还是重新开启页面,页面上的时间不发生变化,除非关闭服务器。
include指令
include指令是将被引用的文件中的内容包含进来,一起执行。被包含的文件可以是任意类型的。例如:
common.txt:
<%@page contentType="text/html;charset=gb2312" import="java.util.Date"%> |
index.jsp:
<%@include file="common.txt"%> <HTML> <HEAD> <TITLE>include指令</TITLE> </HEAD> <BODY> <% Date d = new Date(); out.println("时间:"+d.toLocaleString()); %> </BODY> </HTML> |
运行以上的代码,我们会发现有乱码!这是怎么回事呢?不是说将common.txt中的内容已经包含进来了吗?
我们去查看work目录下的临时文件就会发现,这里所说的将内容包含进来一起执行,是指的他们被翻译成servlet之后,而在此之前,他们是被分别编译成servlet的,这导致了index.jsp中汉字的编码错误。
include指令可以出现在任何需要它的地方,被包含的文件中可以写任何所需要的代码,但是一般不要写HTML代码,否则会与其它文件的标签冲突。例如:
common.txt:
<% int i = 1,j = 2; %> |
index.jsp:
<%@page contentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>include指令</TITLE> </HEAD> <BODY> <%@include file="common.txt"%> <% System.out.println((i+j)); %> </BODY> </HTML> |
include动作
使用include动作时,先执行被包含的文件,然后将它执行的结果包含进来显示,因此,被包含文件通常也是JSP文件。先看下面的例子:
common.jsp:
<% int i = 1,j = 2; System.out.println(i+j); %> |
index.jsp:
<%@page contentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>include指令</TITLE> </HEAD> <BODY> <%@include file="common.jsp"%> <% int i = 1,j = 2; %> </BODY> </HTML> |
执行上例,我们会看到系统报错,因为如上所述,include指令是用来包含文件的内容,所以这里i和j就会发生重复定义。我们将它改为include动作:
common.jsp:
<%@page contentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>include动作</TITLE> </HEAD> <BODY> <% int i = 1,j = 2; System.out.println(i+j); %> </BODY> </HTML> |
index.jsp:
<%@page contentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>include动作</TITLE> </HEAD> <BODY> <jsp:include page="common.jsp"/> <% int i = 1,j = 2; %> </BODY> </HTML> |
这时,系统就不会发生错误。因此,我们在选择使用include指令或动作时,要根据实际情况考虑。
include动作还可以用来进行参数的传递,主页面将参数信息传给从页面,然后将从页面的计算结果再包含进来,例如:
common.jsp:
<%@page contentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>include动作传参数</TITLE> </HEAD> <BODY> <h1>参数1:<%=request.getParameter("ref1")%></h1> <h1>参数2:<%=request.getParameter("ref2")%></h1> </BODY> </HTML> |
index.jsp:
<%@page contentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>include动作传参数</TITLE> </HEAD> <BODY> <jsp:include page="common.jsp"> <jsp:param name="ref1" value="aaa"/> <jsp:param name="ref2" value="111"/> </jsp:include> </BODY> </HTML> |
注释
<%@page contentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>注释的使用</TITLE> </HEAD> <BODY> <!-- HTML注释,此注释内容会发送到客户端 --> <% // 可以使用JAVA的单行注释 /* 多行注释 */ %> <%-- JSP中使用的注释,不会被发送到客户端 --%> </BODY> </HTML> |
forward跳转
index.jsp:
<%@page contentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>forward跳转</TITLE> </HEAD> <BODY> <% System.out.println("跳转之前……"); %> <jsp:forward page="common.jsp"/> <% System.out.println("跳转之后……"); %> </BODY> </HTML> |
common.jsp:
<%@page contentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>forward跳转</TITLE> </HEAD> <BODY> <H1>这里是common.jsp</H1> </BODY> </HTML> |
运行上例,我们可以看出,当执行了forward跳转后,该页面剩余部分的代码不再被执行,并且地址栏里也不会发生变化。
采用forward跳转可以将参数传递给下一个页面,例如:
index.jsp:
<%@page contentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>forward跳转</TITLE> </HEAD> <BODY> <jsp:forward page="common.jsp"> <jsp:param name="ref1" value="aaa"/> <jsp:param name="ref2" value="111"/> </jsp:forward> </BODY> </HTML> |
common.jsp:
<%@page contentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>forward跳转</TITLE> </HEAD> <BODY> <h1><%=request.getParameter("ref1")%></h1> <h1><%=request.getParameter("ref2")%></h1> </BODY> </HTML> |
值得注意的是,我们写成<jsp:forward page="common.jsp?ref1=aaa"/>这种形式同样是可以的!