您的位置:首页 > Web前端 > JavaScript

JSP 的“4379”

2016-02-17 22:18 591 查看

1.JSP 的“4379”

1.1导言

上一节我们说到的是JSP的基本原理,今天我们就要来说JSP的“4379”。那么何为“4379”呢?其实这是笔者的说法。“4379”是:JSP的4种基本语法、JSP的3个编译指令、JSP的7个动作指令、JSP脚本中的9个内置对象(注:以上是我们常用的)。接下来,笔者将会细说JSP的“4379”。

1.2 JSP的4种基本语法

JSP的4种基本语法,其实就是:JSP注释、JSP声明、JSP输出表达式、 JSP的脚本。下面笔者用表格的形式来说明。

基本语法
格式
例子
注意
JSP注释
<%--注释内容--%>

<!—注释内容-->
<%--JSP注释部分--%>
<!—HTML注释部分-->
JSP声明
<%!声明部分%>
<!-- 下面是JSP声明部分 -->
<%!
//声明一个整形变量
public int count;
//声明一个方法
public String info()
{
return "hello";
}
%>
<body>
<%
//将count的值输出后再加1
out.println(count++);
%>
<br/>
<%
//输出info()方法的返回值
out.println(info());
%>
由于JSP声明语法的变量和方法对应于Servlet类的成员变量和方法,所以JSP声明部分定义的变量和方法可以使用private、public等访问控制符修饰,也可以使用static修饰,将其变成类属性和类方法。但不能使用abstract修饰声明部分的方法,因为抽象方法将导致JSP对应Servlet变成抽象类,从而导致无法实例化。

JSP输出表达式
<%=JSP输出表达式%>
<%!
public int count;

public String info()
{
return "hello";
}
%>
<body>
<!-- 使用表达式输出变量值 -->
<%=count++%>
<br/>
<!-- 使用表达式输出方法返回值 -->
<%=info()%>
输出表达式语法后不能有分号

JSP脚本
包含Java代码的放入到<% %>中
<table bgcolor="#9999dd" border="1" width="300px">
<!-- Java脚本,这些脚本会对HTML的标签产生作用 -->
<%
for(int i = 0 ; i < 10 ; i++)
{
%>
<!-- 上面的循环将控制<tr>标签循环 -->
<tr>
<td>循环值:</td>
<td><%=i%></td>
</tr>
<%
}
%>
<table>
实际上不仅JSP小脚本部分会转化成_jspService方法里的可执行代码,JSP页面里的所有静态内容都将由_jspService方法里输出语句输出,这就是JSP脚本可以控制JSP页面中静态内容的原因。由于JSP脚本将转换成_jspService方法里的可执行性代码,而java语法不允许在方法里定义方法,所以脚本里不能定义方法。

1.3 JSP的三个编译指令

1.3.1 三个编译指令

对于JSP来说,主要的编译指令有以下三个:

1) page:该指令是针对当前页面的指令

2) include:用于指定包含另一个页面

3) taglib:用于定义和访问自定义标签

使用编译指令的语法格式如下:

<%@ 编译指令名 属性名=”属性值”····%>

接下来笔者主要讲的是page和include指令,对于taglib指令笔者将在后面的JSP标签中讲解。

1.3.2 page指令

1) page指令通常用于JSP页面的顶端,而且一个JSP页面可以含有多个page指令。page指令的格式如下:

<%

[language="Java"]

[extends="package.class"]

[import="package.class|package.*,..."]

[session="true|false"]

[buffer="none|8KB|size kb"]

[autoFlush="true|false"]

[isThreadSafe="true|false"]

[info="text"]

[errorPage="relativeURL"]

[contentType="mimeType[;charset=characterSet]"|"text/html;charSet=ISO-8859-1"]

[pageEncoding="ISO-8859-1"]

[isErrorPage="true|false"]

%>

2) page各属性的意义

属性
意义
language
声明当前JSP页面使用的脚本语言的种类,因为页面是JSP页面,该属性的值通常都是java,该属性的默认值也是java,所以通常无须设置
extends
该属性的默认值编译所产生的Java类所继承的父类,或所实现的接口
import
用来导入包。下面几个包是默认自动导入的,不需要显式导入。默认导入的包有:java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*
session
设定这个JSP页面是否需要HTTP Session
buffer
指定输出缓存区的大小。输出缓存区JSP内部对象:out用于缓存JSP页面对客户浏览器的输出,默认值为8KB,可以设置为none,也可以设置为其他的值,单位为KB
autoFlush
当输出缓存区即将溢出时,是否需要强制输出缓存区的内容。设置为true时为正常输出,如果设置为false,则会在buffer溢出时产生一个异常。
info
设置该JSP程序的信息,也可以看做其说明,可以通过Servlet.getServletInfo()方法获取该值。如果在JSP页面中,可直接调用 getServletInfo()方法获取该值,因为JSP页面的实质就是Servlet。
errorPage
指定错误处理页面。如果本页面产生了异常或者错误,而该JSP页面没有对应的处理代码,则会自动调用属性所指定的JSP页面。
isErrorPage
设置本JSP页面是否为错误处理程序。如果该页面本身已是错误处理页面,则通常无须指定errorPage.
contentType
用于设定生成网页的文件格式和编码字符集,即MIME类型和页面字符集类型默认的MIME类型是text/html;默认的字符集类型为ISO-8859-1
pageEncoding
指定生成网页的编码字符集

1.3.3 include指令

1) 使用include指令,可以将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句(如果有的话)。这是个静态的include语句,它把目标页面的其他编译指令也包含进来,但动态include则不会变。

2) include既可以是包含静态的文本,也可包含动态的JSP页面。静态include编译指令会将包含的页面加入本页面,融合成一个页面,因此被包含页面甚至不需要是一个完事的页面。如果被嵌入的文件经常需要改变,建议使用<jsp:include>操作指令,因为它是动态的include语句

3) 例子:<%@include file=”scriptlet.jsp”%>

1.4 JSP的7个动作指令

动作指令与编译指令不同,编译指令是通知Servlet引擎的处理消息,而动作指令只是运行时的动作。编译指令在将JSP编译成Servlet时起作用;而处理指令通常可替换成JSP脚本,它只是JSP脚本的标准化写法。下面笔者依然通过一张表格来说明。

动作指令
说明
格式
例子
注意
jsp:forward
执行页面转向,将请求的处理转发到下一个页面
<jsp:forward page=”{relativeURL|<%=expresssion%>}”>
{<jsp:param…/>}
</jsp:forward>
<jsp:forward page="forward-result.jsp"
<jsp:param name="age" value="29"/>
</jsp:forward>

<!--forward-result.jsp获取参数-->
<%=request.getParameter("age")%>
forward拿目标页面代替原有页面,而include则拿目标页面插入原有页面
jsp:include
用于引入动态一个JSP页面
<jsp:include page=”{relativeURL|<%=expression%>}” flush=”true”/>

<jsp:include page=”{relativeURL|<%=expression%>}” flush=”true”>
<jsp:param name=”paramterName” value=”parameterValue”/>
</jsp:include>
<jsp:include page="scriptlet.jsp" />
静态导入是将被导入页面的代码完全融入,两个页面融入合成一个整体;而动态导入则在Servlet中使用include方法引入被导入页面的内容。

静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是在插入被导入页面的body内容。

动态还包含可以增加额外的参数

jsp:param
用于传递参数,必须与其它支持参数的标签一起作用
<jsp:param name=”paramterName” value=”parameterValue”/>

可以与jsp:include、jsp:forward、jsp:plugin一起用

jsp:plugin
用于下载JavaBean或Applet到客户端执行
jsp:useBean
创建一个JavaBean的实例
<jsp:useBean id=”name” class=”classname” scope=”page|reques|sesion|application”/>
<jsp:useBean id=”p1” class=”linjw.Person” scope=”page”/>
page:该JavaBean实例仅在当前页面有效;request:该JavaBean实例在本次请求有效;session:该JavaBean实例在本次Session内有效;application:该JavaBean实例在本应用内一直有效

jsp:setProperty
设置JavaBean实例的属性值
<jsp:setProperty name=”BeanName” Proterty=”propertyName”/>
<jsp:setProperty name=”p1” property=”name” value=”linjw”/>
jsp:getProperty
输出JavaBean实例的属性值
<jsp:getProperty name=”BeanName” proterty=”protertyName”
<jsp:getProperty name=”p1” proterty=”name”/>

1.5 JSP 脚本中的9个内置对象

JSP脚本中包含9个内置对象,这9个内置对象都是ServletAPI接口的实例,只是JSP规范对它们进行了默认初始化(由JSP页面对应Servlet的_jspService()方法来创建这些实例化)。也就是说,它们已经是对象,可以直接使用。一样的,笔者通过表格形式来说明这9个内置对象。

内置对象
说明
application
javax.servlet.ServletContext的实例,该实例代表JSP所属的Web应用本身,可用于JSP页面,或者在Servlet之间交换信息。常用的方法有getAttribute(String attName)、setAttribute(String attName,String attValue)和getInitParameter(String paramname)等
config
javax.servlet.ServletConfig的实例,该实例代表JSP的配置信息。常用的方法有getInitParameter(String parameterName)和getInitParameternames()等。事实上,JSP通常无须配置,也就不存在配置信息。因此,该对象更多地在Servlet中有效
exception
java.lang.Throwable的实例,该实例代表其他页面中的异常和错误。只有当页面是错误信息处理页面,即编译指令page的isErrorPage属性为true时,该对象才可以使用。常用的方法有getMessage()和printStackTrace()等
out
javax.servlet.jsp.JspWriter的实例,该实例代表JSP页面的输出流内容 ,形成HTML页面
page
代表该页面本身,通常没有太大用处。也就是说Servlet中的this,其类型就是生成的Servlet类,能用page的地方就可用this.
pageContext
javax.servlet.jsp.PageContext的实例,该对象代表JSP页面上下文,使用该对象可以访问页面中的共享数据。常用的方法有getServletContext()和getServletConfig()等
request
javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户的请求参数都被封装在该对象里。这是一个常用的对象,获取客户端请求参数使用必须使用该对象。常用的方法有:getParameter(String paramname)、getParameterValues(String paramName)、setAttribute(String attrname,Object attrValue)、getAttribute(String
attrName)和setCharacterEncoding(String env)等
response
javax.servlet.http.HttpServletResponse的实例,代表服务器对客户端的响应。通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应。而response对象常用于重定向,常用方法有getOutputStream()、sendRedirect(java.lang.String.location)等
session
javax.servlet.http.HttpSession的实例,该对象代表一次会话。当客户端浏览器与站点建立起连接时,会话开始;当客户端关闭浏览器时,会话结束。常用的方法有:getAttribute(String attrName)、setAttribute(String attrName,Object attrValue)等

1.6总结

JSP的4种基本语法、3个编译指令、7个动作指令和脚本中的9个内置对象,其实这些都是JSP中的简单用法,也是要学习JSP的必须了解的知识。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: