文档库 最新最全的文档下载
当前位置:文档库 › (2)表示层JSP技术

(2)表示层JSP技术

第二章 JSP 技术

一 Sun JSP技术基础

1.JSP简介:

JSP技术是一个纯Java平台的技术,它主要用来产生动态网页内容,包括:HTML、DHTML、XHTMl和XML。JSP技术能够让网页人员轻易建立起功能强大、有弹性的动态内容。

2.JSP技术有下列优点:

(1)Write Once,Run Anywhere特性

作为Java平台的一部分,JSP技术拥有Java语言“一次编写,各处执行”

的特点。这使得在更换服务器平台的情况下,JSP并不需要改变。这不但减轻了开发人员的工作还可以节省公司的成本。

(2)搭配可重复使用的组件

JSP技术可依赖于重复使用跨平台的组件(如:JavaBean或Enterprise JavaBean组件)来执行更复杂的运算、数据处理。开发人员能够共享开发完成的组件,或者能够加强这些组件的功能,让更多用户或是客户团体使用。

基于善加组件的方法,可以加快整体开发过程,也大大降低公司的开发成本和人力。

(3)采用标签化页面开发

JSP技术能够将许多功能封装起来,成为一个自定义的标签,这些功能是完全根据XML的标准来制订的,即JSP技术中的标签库。

(4)企业应用架构的支持

网际网络发展的速度很快,服务要求也越来越复杂,而且不受地域限制。因此必须放弃以往的JSP+JavaBean的两层架构,进而转向更具威力、弹性的分散性的架构基于MVC的三层架构。由于JSP技术是JavaEE集成中的一部分,它主要是负责前端显示经过复杂运算后之结果内容。业务逻辑处理并不依赖于JSP。主要有JavaBean、Enterprise JavaBean(EJB)和JNDI构建而成。

JSP是由Sun公司倡导、许多别的公司参与一起建立的一种新动态网页技术标准,类似其他技术标准,如ASP、PHP等。

在传统的网页HTML文件中加入Java程序段(Scriptle)和JSP标签,构成了JSP网页(*.jsp)。Servlet/JSP 容器收到客户端发出的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式响应给客户端。其中程序片段可以是:所有程序操作都在服务器端执行,网络上传给客户端的仅是得到的结果,与客户端的浏览器无关,因此,JSP是属于服务端的代码。

3.JSP与Servlet的比较:

Sun公司首先发展出Servlet,其功能非常强大,且体系设计也很完善,但是它输出HTML语法时,必须使用out.println()一句一句地输出,例如下面的程序段:

上例是一段简单的Hello World程序,看不出其复杂性,但当网页内容非常复杂时,那么你的Servlet程序可能大部分都是用out.println()输出HTML的标签。

后来Sun公司推出类似于ASP的嵌入型Scripting Language,并且给它一个新的名称:JSP。于是上面的程序改为:

这样就简化的编写页面的难度。

4.JSP与Servlet在应用上的区别:

(1)主要差别

JSP中应该仅仅存放与表示层有关的内容,也就是说,只放输出HTML网页的部分;而所有的数据计算、分析、数据库连接等处理,统统是属于业务层,应该放在JavaBean或者Servlet中。

注意:Servlet是包含HTML代码的Java程序,而JSP是包含Java代码的HTML网页。

(2)Servlet与JSP相互配合

Servlet写业务层很好,写表示层则不方便。所以用JSP写表示层,JavaBean 写业务层,Servlet用来协调控制JSP与JavaBean之间的调用。

5.JSP工作原理

(1)客户端发出Request(请求);

(2)JSP容器将JSP转译成Servlet源代码:

(3)将产生的Servlet源代码经过编译后,加载到内存执行;

(4)把结果Response(响应)至客户端。

图2-1 JSP 执行过程

一般人会认为JSP 的执行性能会和Servlet 相差不多,其实执行性能上的

差别只是在第一次的执行。因为JSP 在执行第一次后,会被编译成Servlet 的类文件,即为XXX.class ,当再重复调用执行时,就直接执行第一次所产生的Servlet ,而不用再重新把JSP 编译成Servlet 。因此,除了第一次的编译会花较久的时间之外,之后JSP 和Servlet 的执行速度就几乎相同了。

6.URL 和URI

(1) URL

?统一资源定位符(Uniform Resource Locator, URL )定义客户端连接到服务器所需要的信息。 (2) URI

?统一资源标识符(Uniform Resource Identifier,URI )是URL 的一部分,没有域名和查询字符串,就是指定域名之后和查询字符串之间的所有信息,其作用是指定资源 –例子:

?URL: https://www.wendangku.net/doc/093364998.html, /products/servlet/index.html ?id=90 ?URI: /products/servlet/index.html

7.JSP (1)"jspRelativeTest.jsp “

8.JSP 中的各种注释方式

Html形式:,可以在源代码中出现,也可以用变量

Jsp形式:<%- - - -%>源代码看不见

Java代码注释://,/* */

示例:note.jsp

<%

//我是一段注释,我注释的是JSP文件当中的Java代码

/*

out.println("HelloWorld!!");

*/

%>

<%--我是一段JSP的注释内容,我在客户端的脚本里不可以看到 --%>

二 JSP中的脚本(数据声明、表达式、脚本代码)

1.JSP声明标记

(1)目的:定义网页层的变量、函数

(2)语法为: <%! 声明表达式; %>

(3)特性:

–JSP中的声明用于声明一个或多个变量和方法,并不输出任何的文本到out输出流去。

–在声明元素中声明的变量和方法将在JSP页面初始化时被初始化。

每一个声明仅在一个页面中有效,如果你想每个页面都用到一些声明,最好把它们写成一个单独的JSP网页,然后用<%@include%>或元素包含进来。

注意:使用<%! %>方式所声明的变量为全局变量,即表示:若同时n个用户在执行此JSP网页时,将会共享此变量。建议不要使用<%! %>来声明您的变量。

示例: announce.jsp

<%! String a="我是一个声明";

public String A(){

String c="ss";

return c;

}

%>

<%=A() %>

<%=a %>

2.JSP表达式

(1)目的:定义jsp的一些操作

(2)jsp表达式:<%=变量/返回值/表达式%>:将值作为字符串输出(没有分号)

表达式是以<%=为起始;%>为结尾,其中间内容包含一段合法的表达式。

范例:

表达式在执行后会被自动化为字符串,然后显示出来。

当你在JSP中使用表示式时请记住以下几点:

1)不能使用分号“;”来作为表达式的结束符号,如下:

这个表达式元素能够包括任何Java语法,有时候也能作为其他JSP元素的属性值。

3.程序段标记

语法:<% java代码 %>

注意:变量值在请求的时候被赋值,变量调用一定有先后关系

能够包含多个语句,方法,变量,表达式,因此它能做以下的事:

(2)声明将要用到的变量或方法;

(3)显示出表达式;

(4)使用任何隐含的对象和使用声明多的对象,编写JSP语句;

当JSP收到客户端的请求时,Scriptlets就会被执行,如同Servlet的doGet(),doPost(),如果Scriptlets有显示的内容会被存在out对象中,然后再利用out 对象中的println()方法显示出结果。

示例:scriptlet.jsp

<%

for(int i=1;i<=9;i++){

for(int j=1;j<=i;j++){

out.println(j+"*"+i+"="+i*j+" ");

}

out.println("
");

}

%>

三JSP页面中的指令(page和include)

指令是JSP中的一种标签,它给JSP容器提供要求用来处理页面的特殊设置要求-----实现编译的选项;通过这些指令可以改变该JSP页面所对应的Servlet 的结构,以便当页面被处理时能够生成所要求的Servlet程序。

1.JSP指令:page

(1)语法:

<%@ page language = “java” import =“package” errorPage = “filename”

isErrorPage = “true/false” contentType=“text/html;charset=gb2312”%> (2)常见选项

?language:脚本语言的种类,一般写java

?import:导入的包名称。注意,这些包作用于该页面里面所有的代码;https://www.wendangku.net/doc/093364998.html,ng 和java servlet四大包已经事先被导进来;多个包用逗号隔开

?JSP默认导入的包有"https://www.wendangku.net/doc/093364998.html,ng.*","javax.servlet.*",

"javax.servlet.jsp.*","javax.servlet.http.*"

?所有属性表见下页.

注意:除了import之外,其它属性最多只能指定一次

示例:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> 2.include

(1) 语法:<%@ include file = “文件名” %>

(2) 意义:将这一个文件的代码插入到jsp页面中

(3) 作用:很多网页中相同的商标;对数据库的连接等等

注意:

–被包含的文件中不能出现或者等标签

如果文件被修改,下次请求的时候被重新包含;包含的时候注意要有先后要注意变量冲突问题

示例:main.jsp

这是我的一个JSP页面

<%@ include file="include.jsp" %>

这是我的一个JSP页面

include.jsp

我是一个被包含的页面.

四.JSP中的标准动作标签

1.

(1) 作用:将页面从新定向到另一个页面

(2) 语法::1.0规范

1.1规范以上

注意:1):url可以是变量;

2):第二种和第一种相通,可以指定多个参数;

3):指令后面的代码将不被执行;

4):之前最好不要有内容送到客户端(和服务器设置有关系)

5):尽量不要使用

示例:main1.jsp

<%

String s="forward.jsp";

String n="zhanghf";

%>

这是我的一个JSP页面

<%-- --%>

这是我的一个JSP页面

forward.jsp

我是一个forward跳转页面.

out.println(request.getParameter("NN"));

%>

2.

(1) 作用:在JSP中包含另一个文件

(2) 语法::1.0规范

: 1.1规范以上

注意 1):url可以是变量;

2):第二种和第一种相通,可以指定多个参数

(3) 和include的区别:

1)从内部实现机制:

-- :servlet容器将被包含页面重新创建一个servlet文件,并且在当前文件中加入一个方法,动态调用新创建的servlet文件.

-- Include指令:servlet容器不创建被包含页面的servlet文件,而是直接将被包含页面的内容直接放到当前页面中.

2)从表面来看:

:允许你包含动态和静态文件 ,可以通过param为它提供参数

Include指令:仅能引用静态文件(HTML或JSP),因此耗用资源少,而且被应用文件可以使用在页面servlet中定义的实例和类变量.

示例:main2.jsp

<%

String s="jspinclude.jsp";

String n="zhanghf";

%>

这是我的一个JSP页面

<%-- --%>

这是我的一个JSP页面

jspinclude.jsp

我是一个被包含的页面.

<%

out.println(request.getParameter("NN"));

%>


3., ,

将放在<<第四章模型层JavaBean技术>>当中进行讲解

相关文档