JSP页面的基本结构:HTML元素;注释(JSP注释,HTML注释);脚本元素(声明,表达式,脚本片段);指令(page指令,taglib指令,include指令);动作(<jsp:useBean>,<jsp:forward>,<jsp:include>)。
1、注释:
1)HTML注释:<!-- HTML注释--> 客户端查看源代码时可以看到
2)JSP注释:<%-- JSP注释--%> 又称隐藏注释,客户端看不到
|
|
servlet源文件 |
客户端页面源文件 |
浏览器显示 |
|
HTML注释 |
出现 |
出现 |
不显示 |
|
隐藏注释 |
不出现 |
不出现 |
不显示 |
|
脚本注释 |
出现 |
不出现 |
不显示 |
2、脚本元素:JSP页面中的java代码段
1)声明变量:<%! 声明语句;%>
2)声明方法:<%! 声明方法%>
声明变量和声明方法时页面级的,即它们在声明语句所在的页面时有效的。Tomcat将JSP页面转换为java类,则声明变量是该类的成员变量,声明方法时该类的的方法。成员变量在执行过程中是被所用用户共享的,用户改变成员变量时会影响其他用户使用此成员变量
3)表达式:<%= 表达式%> 服务器将运算结果转换为字符串输出到JSP页面
注:表达式后不需加“;”,“<%=”是一个整体不可有空格。
4)java程序段:<% java程序段 %> 当JSP页面被客户请求时,java程序段就被执行,且是按先后顺序执行的;JSP页面被编译成一个java类,java程序段则放置在java类的service()方法中;java程序段中声明的是局部变量,在JSP页面的后继的所有程序段及表达式中均有效,且不同用户在访问JSP页面中相同名称的局部变量时,局部变量互不影响。
<%!
private int a=1;
public String print(){
return "this is function";
}
%>
<%int b=1; %>
a:<%=a++%><br><!--全局的在整个中只有一个 -->
b:<%=b++%><!--在service方法中,每次调用都是一个新的 -->
3、JSP指令:负责提供JSP页面的相关信息,以及设置JSP页面的属性。
1)page指令:用来设置JSP页面的属性。
<%@ page language = “java”
contentType=“MIMEType; charset=characterSet” //声明MIME类型和字符编码集,默认为
“text/html;charset=iso-8859-1”
pageEncoding=“characterSet” //设定,默认为iso-8859-1, 优先级不如
contentType("text/html;charset=utf-8");
import=“package.class” //导入JSP页面所使用的java API,以逗号隔开
extends=“package.class” //定义产生的servlet是继承哪个父类,默认为HttpJspBase
buffer=“none|size kb|8kb” //输出流缓存的大小,默认8kb
errorPage=“URL” //发生错误时页面被重定向指向的错误处理页面
autoFlus=“false|true” //缓存区的内容是否自动清除,默认true
session=“false|true” //页面是否需要一个HTTP会话,默认true,如果值为false,则对应的servlet代码 当中不会生成声明和创建session的代码。也就是说,不能够使用session隐含对象了。
isThreadSafe=“false|true” //是否支持多线程同步请求,默认true
isErrorPage=“false|true” //该页面是否为错误处理页面,默认false
isELPage=“false|true” //是否忽略EL表达式,默认false
info=“***” //可以为任意字符串,可通过Servlet.getServletInfo()来获取所设置字符串
%>
page指令出现次数没有限制,但属性最多出现一次,import属性除外。
2)include指令:页面包含指令,可以在JSP页面中包含另一个文件。
<%@ include file = “文件名”%>
注:若包含的文件与JSP页面不在同一目录下,需要指出相对路径;两个JSP页面的page指令的contentType值必须完全一致。
3)taglib指令:可以使JSP页面中使用自定义的标签。
<%@ taglib uri = “tagURI” prefix = “prefix”%>
uri:指定自定义标签文件的路径
prefix:指定标签的前缀,不可为保留字
使用taglib指令时,应先定义标签文件,然后在JSP页面中使用taglib指令引用该标签文件,就可在JSP文件中使用该标签文件了。
4、JSP动作:
1)<jsp:include>:将指定的页面包含到使用此动作标记的JSP页面中
方法一:<jsp:include page=“文件的URL|<%=表达式%>” flush=“true”/>
方法二:<jsp:include page=“文件的URL|<%=表达式%>” flush=“true”>嵌套子标记</jsp:include> //flush缓存是否被清空
注:需要传递参数时使用<jsp:param>动作标记作为嵌套子标记。
<jsp:include>和include指令的区别:
n include指令是静态包含,在JSP页面编译时执行,引入的内容为静态文件,在JSP页面编译时被包含文件与主文件已经融合在一起。
n <jsp:include>是动态包含,在请求处理阶段执行,引入的内容在执行页面被请求时动态生成后再包含到页面中。
2)<jsp:param>:用来传递参数
<jsp:param name=”参数名” value=”参数值”/>
使用request对象的getParameter()方法获取<jsp:param>的参数值。
3)<jsp:forward>:重定向至其page属性指定的页面。
方法一:<jsp:forward page=”跳转页面的URL|<%=表达式%>”/>
方法二:<jsp:forward page=”跳转页面的URL|<%=表达式%>”>
<jsp:param value=”参数值” name=”参数名”></jsp:forward>
注:跳转页面时,URL不会改变;一旦执行<jsp:forward>标记,那么当前页面的后续代码就会停止。
|
SendRedirect外部跳转 |
Forward内部跳转 |
|
是不同的request |
虽然是不同的对象,但是,可以取到上一个页面的内容 |
|
send后的语句会继续执行,除非return |
forward后的语句不会继续发送给客户端 |
|
速度慢 |
速度快 |
|
需要到客户端的往返,可以转到任何页面 |
服务器内部转换 |
|
地址栏有变化 |
地址栏没有变化 |
|
可以传参数,直接写在url后面 |
可以传参数 |
4)<jsp:useBean>:
方法一:<jsp:useBean id=”bean的名字” class=”引用bean的类” scope=”bean的作用域”/>
方法二:<jsp:useBean id=”bean的名字” class=”引用bean的类” scope=”bean的作用域”>
</jsp:useBean>
id:引用的javaBean在所定义的作用域的名称,区分大小写,且不同名。
class:引用的javaBean的完整包路径,一般“package.class”.
scope:指定javaBean和id的有效范围,page,request,session,application。
page:当前页面有效,用户间互不影响。
request:请求期间有效,用户间互不影响。
session:会话期间有效,用户影响。
application:整个Web应用,用户影响。
5)<jsp:setProperty>:与<jsp:useBean>一起使用,设置JavaBean属性值。
<jsp:setProperty name=”useBean标记中的id值” property=”*|javaBean的属性名” value=”javaBean属性值|<%=表达式%>”/>
6)<jsp:getProperty>:与<jsp:useBean>一起使用,获取javaBean属性值。
<jsp:setProperty name=”useBean标记中的id值” property=”*|javaBean的属性名” />
5、补充:JSP页面中的异常处理:
n <%=exception.toString()%> 打印异常名称;
n <%exception.printStackTrace()%> 打印当前错误流中所有错误的列表;
n <%=exception.getMessage()%> 打印错误的详细描述信息;
本文介绍了JSP页面的基础结构,包括HTML元素、注释、脚本元素(声明、表达式、脚本片段)、指令(page、taglib、include)以及动作(jsp:useBean、jsp:forward、jsp:include)。讲解了JSP注释的两种形式,脚本元素的用途,以及page指令的多种属性设置。同时,对比了jsp:include和include指令的区别,并概述了JSP动作标签的功能,如jsp:forward、jsp:param、jsp:useBean及其相关属性的用法。
825

被折叠的 条评论
为什么被折叠?



