JSP程序实际就是在HTML中插入大量的Java代码,具有交互性,可以接收用户传递的一些信息,且JSP文件一定要在服务器上运行
JSP文件的运行过程:JSP文件最后都会以class文件的形式运行
JSP注释
JSP中支持两种注释形式,一种是显式注释,即允许客户端看见;另一种是隐式注释,即不允许客户端看见
显式注释:<!--注释内容-->
隐式注释: 1.//这是一个单行注释 2./*这是一个多行注释*/ 3.<%--这是JSP注释--%>
Scriptlet
这是脚本小程序,插在HTML中的Java程序都必须使用Scriptlet标记出来
第一种Script使用<%%>表示,可以在其中定义局部变量、编写语句等
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%
//定义局部变量
int x = 10;
//编写语句
out.print("<h3>x = " + x + "</h3>");
%>
</body>
</html>
第二种Scriptlet是使用<%!%>表示,在此Script中可以定义全局变量、方法、类
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%!
//定义全局变量
public static final int x = 10;
//定义方法
public int add(int x, int y){
return x + y;
}
//定义一个类
class Person{
private String name;
private int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
public String toString(){
return "name is " + this.name + " and age is " + this.age;
}
}
%>
<%
//编写语句
out.println("<h3>x = " + x + "</h3>");
out.println("<h3>add(4,7) = " + add(4,7) + "</h3>");
out.println("<h3>person = " + new Person("John",15) + "</h3>");
%>
</body>
</html>
第三种Scriptlet是使用<%=%>,主要功能是输出一个具体的常量,也成为表达式输出
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%
//定义局部变量
int x = 10;
%>
<!--使用表达式输出变量-->
<h3>x = <%= x %></h3>
</body>
</html>
在开发中尽量不要使用
out.println()进行输出,而使用表达式输出
在JSP文件中,为实现HTML代码和Java代码的分离,表达式输出会更加方便,会使代码变得非常整洁
另外,若for语句写在了多个Scriptlet中,一定要加“{}”,否则程序会出现错误
Scriptlet标签
新版JSP中提供了一种Scriptlet标签,其作用与<%%>相同
<jsp:scriptlet>
java 代码
</jsp:scriptlet>
Page指令
page定义了JSP页面的相关属性,包括设置MIME类型、定义需要导入的包、错误页的指令等
| No. | 指令属性 | 描述 |
|---|---|---|
| 1 | autoFlush | 可以设置true或false,如果设置为true,当缓冲区满是,客户端的输出会被刷新;如果设置为false,当缓冲区满时,将出现异常,表示缓冲区溢出。默认为true,如果autoFlush=“true” |
| 2 | buffer | 指定到客户端输出流的缓冲模式。如果为none,则表示不设置缓冲区;如果指定数值,那么输出时就必须使用不小于这个值的缓冲区进行缓冲。此属性要和autoFlush一起使用。默认不小于8KB,根据不同的服务器可以进行不同的设置 |
| 3 | contentType | 定义JSP字符的编码和页面响应的MIME类型,如果是中文HTML显示,则使用如下形式:contentType=“text/html;charset=GBK” |
| 4 | errorPage | 定义此页面出错时要跳转的显示页,如errorPage=“error.jsp”,要与isErrorPage属性一起使用 |
| 5 | extends | 主要定义此JSP页面产生的Servlet是从哪个父类扩展而来,如extends=“父类名称” |
| 6 | import | 此JSP页面要导入哪几个操作包,如import=“java.util.*” |
| 7 | info | 此JSP页面的信息,如info=“textinfo” |
| 8 | isErrorPage | 可以设置为true或false,表示此页面是否为出错的处理页。如果设置为true,则errorPage指定的页面出错时才能跳转到此页面进行错误处理;如果设置为false,则无法处理 |
| 9 | isThreadSafe | 可以设置为true或false,表示此页面是否是线程安全的。如果为true,表示一个JSP页面可以处理多个用户的请求;如果为false,则此JSP一次只能处理一个用户请求 |
| 10 | language | 用来定义要使用的脚本语言,目前只能是java,如language=“java” |
| 11 | pageEncoding | JSP页面的字符编码,默认值为pageEncoding=“iso-8859-1”,如果是中文则可以设置为pageEncoding=“GBK” |
| 12 | session | 可以设置为true或false,指定所在页面是否参与HTTP会话。默认为true,如session=“true” |
只有import指令可以重复多次出现
page指令的语法是<%@ page 属性=“内容” %>
MIME
• 使用MIME类型可以设置打开文件的应用程序类型,指定某个扩展名文件将使用何种应用程序打开的一个说明
• 若MIME类型设置错误,则可能出现下载提示框。例如将“text/html;charset=GBK”写成了“test/html;charset=GBK”,在运行时则会出现一个下载提示框
• html文件和htm文件是完全一样的,处理的MIME类型也是一样的
设置文件编码
pageEncoding 和 contentType 都可以设置文件的编码,两者的区别在于contentType中的charset指的是服务器发送给客户端的内容编码,pageEncoding指的是JSP文件本身的编码
如果pageEncoding存在,那么JSP的编码将由pageEncoding决定,否则将由contentType中的charset决定,如果两者都不存在,将使用ISO-8859-1的编码方式
在JSP页面中,所有内容都要经过两次的编码操作,第一阶段会使用pageEncoding编码,第二阶段会使用utf-8编码,第三阶段是Tomcat生成的网页,使用的才是contentType
设置错误页
在page指令中设置错误页即可,例如:<%@ page errorPage="error.jsp" %>
设置后,一旦发生异常,就会跳转到所设置的页面
在跳转中,若地址栏没有发生改变,则称为服务器端跳转。例如错误页的跳转,在整个过程中,客户端只对服务器请求了一次,服务器也只回应了一次
若程序跳转后地址栏发生改变,则称为客户端跳转。例如超链接的跳转就是一种客户端跳转
包含指令
静态包含指令是在JSP编译时插入一个包含文本或代码的文件,包含的文件可以是JSP文件、HTML文件、文本文件,或是一段Java程序
静态包含的语法是:<%@ include file="包含的文件路径" %>
定义要包含的文件info.html
<h2>
<font color="red">info.html</font>
</h2>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%@include file="info.html" %>
</body>
</html>
动态包含是使用<jsp:include>指令完成动态包含的操作
该指令可以识别是静态包含还是动态包含,如果是静态页面,则与静态包含一样;若是动态页面,则可以先进行动态处理再将处理结果包含进来
不传递参数:
<jsp:include page="{要包含的文件路径|<%=表达式%>}" flush="true|false" />
传递参数:
<jsp:include page="{要包含的文件路径|<%=表达式%>}" flush="true|false" >
<jsp:param name="参数名称" value="参数内容" />
...可以向被包含的页面传递多个参数
</jsp:include>
在包含页使用request.getParameter() 来接收传递过来的参数
在开发中要尽量使用动态包含指令
跳转指令
使用<jsp:forword>指令可以将用户的请求从一个页面传递到另外一个页面
不传递参数:
<jsp:forword page="{要包含的文件路径|<%=表达式%>}" flush="true|false" />
传递参数:
<jsp:forword page="{要包含的文件路径|<%=表达式%>}" flush="true|false" >
<jsp:param name="参数名称" value="参数内容" />
...可以向被包含的页面传递多个参数
</jsp:forword>
这种跳转属于服务器跳转
在开发中尽量分开编写动态页和静态页,这样可以提升程序的运行速度

2458

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



