JSP 的“4379”

来源:互联网 发布:js class 写法例子 编辑:程序博客网 时间:2024/06/05 09:15

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的必须了解的知识。


0 0
原创粉丝点击