QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3360|回复: 13
打印 上一主题 下一主题

jsp由浅入深

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 00:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
5 H6 f5 {1 T7 Q6 s. S- ]8 c5 v- k- G+ V" S) I2 \( x4 n" S# }% v; e: V) z9 h" X/ r- t, t5 Y% [) Q4 d4 w6 |; E- a; X8 r9 H. ^1 S/ t2 w5 p0 W& y( p X2 d& x/ `% u$ i3 v+ s% G
% f: L) t4 l, p" ~* u; k6 u& ]# M" Y z: J& J5 X+ O3 Z1 Q1 y$ B) _! j) Y9 F. |0 k. D1 e" {) U; |+ n" B: E3 G' k3 L- a' s8 _, t9 {+ F. g1 V( ]( @6 W1 K! U9 l# h7 \, X p2 @0 T7 b$ P1 u) Y2 t. K- ^* L. V6 ?2 s0 {3 e- q5 ?7 A6 ]& w/ k9 B# |7 {+ F2 `7 \+ ?: j Z! U8 `- ?& H2 x2 @# z: M4 B. c' O5 Z
: T# h% `3 ]& @0 D
JSP由浅入深(1)—— 熟悉JSP服务器
) D o2 w+ y# k3 p4 O9 l
+ ]$ v% b5 I: n1 _' \( V& @
( L9 ]+ g* @" `9 a& u: r
编译:ZSC/太平洋网络学院
G3 j4 q8 b; Q: o5 X" \6 n
4 F5 i4 N- P* I+ |- l

熟悉JSP服务器

2 d% m/ U/ w* r) f

本“JSP由浅入深” 系列教程是面向中级和高级用户的,它需要HTML和Java的基础。你应该会将HTML网页连接到一起,并且会利用Java来进行编程。如果你还没有这个基础,建议你还是先打好基础为好。这个系列教程将通过编制简单的例子到复杂的例子来教会你JSP。本系列教程是采用循序渐进的方法来进行阐述的,即由浅入深。为了使你能够获得最大的进步,建议你再学习的过程中将所有的例子自己进行调试。开始的例子可能会很简单,所以开始的时候你要特别耐心,不要认为太简单而跳过。如果你仔细地调试例子,那么你就会很快地熟悉JSP的本质方法。

! \0 ]& N5 E5 y/ }

好吧,开始我们的第一个教程:熟悉JSP服务器。

: e9 V2 l, Q* e7 @- b. t! w8 T4 X

如果你没有一个JSP网络服务器,那么你在开始教程之前还是先下载它吧。以下的几个服务器可以免费下载或者进行开发:

0 N6 Q* M1 s0 a

Blazix (1.5 Megabytes, JSP, Servlets and EJBs) 2 d+ T- S/ z$ t0 p1 T }9 H% ]来自www.blazix.com/blazix.html

' m1 r) m0 Q% a' f. F. r

ServletExec (3.8 Megabytes, JSP and Servlets) : s( B# C# z8 Z7 i0 K& l, x来自www.unifyeware.com/servletExec/

" L3 z) V8 W/ e8 c. c

JRun (11 Megabytes, JSP, Servlets and EJBs) 1 N @/ @+ ~- t来自www.jrun.com/

- G) g9 z2 f! M) w) E4 W: b4 W8 r

WebLogic(44 Megabytes, JSP, Servlets and EJBs); T0 m8 G- v w- w9 f 来自www.beasys.com/

( \0 q# N4 p( \$ P) ?# m

WebSphere (105 Megabytes, JSP, Servlets and EJBs)$ z _9 h% U& F }2 ]( Y 来自www-4.ibm.com/sofeware/webservers/

$ O! h" p# B0 X1 ? {0 Q

如果你还没有服务器,那我建议你下载Blazix,因为它包含了标签库(可以用于以后关于标签库的教程)。Blazix同样也是很小的并且它可以很容易地下载,而且可以运行于所有的操作系统,包括处于主流的Windows98。还有一个优点,就是它的安装的速度更块。

/ o. X: x+ h, c _7 b* i0 J

为了真正学习JSP,最重要的是,你要在一个真实的服务器来调试教程的例子。最好的方法是通过自己的实践来学习JSP的技巧。如果你现在还没有服务器,那就先下载一个安装它就行了。

& P x0 ]3 U, f4 _

装上网络服务器以后,你应该学会以下关于网络服务器的的一些知识:应该在哪里放置文件?怎样访问来自浏览器的文件(是以http:开头的,而不是file:开头)?

( y7 M2 h$ t, D5 ?, V( q

你首先要创建以下的简单文件,比如:

X1 l# | a9 @0 Z0 W7 Z/ o6 c

<HTML>

1 E0 m6 n2 \: e: Z) ~3 C

<BODY>

) }3 |% X. G, f0 m

Hello, world

O+ _' L% B+ M; X8 }

</BODY>

O) s, Z) p) C

</HTML>

8 Y6 }# @! Q$ U& H

怎样放置文件并在浏览器(以http://)中浏览它,这个步骤对应不同的网络服务器是不同的,所以你需要参看网络服务器的文档并找出答案。

1 G- g ]& I# C8 o5 O

MSITStore:E:\JAVA\Java和Jsp电子书\jsp由浅入深.chm::/JSP.Article/10604.htm" target="_blank" >[下一页]

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

JSP由浅入深(2)—— 第一个JSP
编译:ZSC/太平洋网络学院

第一个JSP

实际上,JSP只是简单地将Java放到HTML网页中去而已。你可以将现有的HTML网页将它们的扩展名由“.html”改为“.jsp”,这是一个创建第一个JSP最好的方法。

我们可以将上一个练习中的文件将它的扩展名由“.html”改为“.jsp”。然后在浏览器中装载新的文件,即以“.jsp”为扩展名的文件。

此时,你可以看到的输出,但是它需要更长的时间。这个现象也只发生在你第一次装载它的时候。如果你重新装载它,速度就正常了。

到底出现的什么事情了?原来是你的JSP被转变成Java文件,并且被编译以及装载。而编译只进行一次,所以第一次装载的时候时间会长一点,原来是花在了编译上了。而在第二次装载的时候它不再需要编译,所以器装载速度就回复正常了。这里要提醒的是,当将HTML格式的文件转变成JSP格式的文件,都需要重新编译。

当然,只是编写HTML网页再将其转变成.jsp扩展名的文件是没有用的,在后面的教程中你将学到什么才能使JSP变得有用。

回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

JSP由浅入深(3)—— 通过表达式增加动态内容
编译:ZSC/太平洋网络学院

  在我们前面的章节中,任何的HTML文件都可以转变成JSP文件,做法是通过改变它的扩展名为.jsp。当然,我们要知道是什么使得JSP有用呢?答案是嵌入Java的能力。将下列文本放置在一个以.jsp为扩展名的文件中,比如说这个文件为myjsp.jsp,然后将这个文件放置到你的JSP目录下并且在浏览器上看它。以下是具体的代码:

<HTML>

<BODY>

Hello! The time is now <%= new java.util.Date() %>

</BODY>

</HTML>

这里要注意,每次你在浏览器中重载网页的时候,它就出现当前时间。字符系列<%= and %>的作用是圈起Java表达式,这个表达式将在运行的时候被计算。

正因为这样,使用JSP产生动态HTML网页来响应用户的动作才变为可能。

好吧,教程结束之后你最好作个练习:为不同的系统属性编写一个JSP用来输出由System.getProperty返回的数值,比如java.version、java.home、os.name、user.home以及user.dir等等。

回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

JSP由浅入深(4)—— Scriptlets
编译:ZSC/太平洋网络学院

上面的教程我们已经学会了如何在JSP网页中通过在<%= and %>字符系列之间嵌入Java表达式。但是通过将Java表达式放置到HTML进行大量的编程工作是很困难的。

JSP另外允许你编写Java代码块嵌入到JSP中。具体做法是:将Java代码段放置于<% and %>字符之间。其实跟表达式是一样的,只不过在开始的地方没有等号而已。

代码块就是我们熟知的“scriptlet”。如果单单是scriptlet,对于HTML起不了任何作用。而每次scriptlet包含了被执行的Java代码的时候,JSP就被调用。

下面的代码是对上一节JSP教程进行修改后的代码,我们增加了一个scriptlet:

<HTML>

<BODY>

<%

// This is a scriptlet. Notice that the "date"

// variable we declare here is available in the

// embedded expression later on.

System.out.println( "Evaluating date now" );

java.util.Date date = new java.util.Date();

%>

Hello! The time is now <%= date %>

</BODY>

</HTML>

如果你运行上面的例子,你将会注意到“System.out.println”输出在服务器日志中。这是一个方便的方法来作一些简单的调试。有些服务器在IDE中有调试JSP的功能,你可以参见服务器文档来查看是否有这种功能。

回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

JSP由浅入深(5)—— Scriptlets和HTML的混合
编译:ZSC/太平洋网络学院

在前面的教程中我们已经在一个scriptlet中使用了“out”变量来产生HTML输出。对于更复杂的HTML,如果我们还是使用“out”变量那就会失去JSP编程的许多优势。其实我们可以很简单地就实现Scriptlets 和 HTML的混合。

假如你要在HTML产生一个表格。产生表格是一个普通的操作,在实践中你可能想从一个SQL表格或者从文件的行产生一个表格。为了是所举的例子尽量的简单,我们产生一个表格,使这个表格包含从1到N的数字。虽然以下的例子不是很有用,但是你从中可以学到一些技巧的。以下就是JSP的程序片段:

<TABLE BORDER=2>

<%

for ( int i = 0; i < n; i++ ) {

%>

<TR>

<TD>Number</TD>

<TD><%= i+1 %></TD>

</TR>

<%

}

%>

</TABLE>

在编制代码之前,你应该首先定义一个整型(int)变量“n”,利用这个变量我们要输出“n”行的表格。从上面的代码中我们可以注意到%> 和 <%字符出现在“for”循环中,原来这是为了使你退到HTML然后又回到scriptlet,其实这正是Scriptlets 和 HTML的混合的技巧。

上面的代码其实很简单:可以退出scriptlet的时候,就编写HTML;然后又回到scriptlet中去。任何的循环控制表达式,比如“while”或者“for”循环以及“if”语句都可以控制HTML。如果HTML处在一个循环中它就会在每一次的循环中执行一次。

回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

JSP由浅入深(6)—— JSP声明
编译:ZSC/太平洋网络学院

现在你所编写的JSP要变成一个类的定义。所有你编写的scriptlets要放置到这个类的一个方法中。同样,你可以增加变量和方法声明到这个类中。当然你也可以从scriptlets和表达式中使用这些变量和方法。

为了增加一个声明,你必须使用<%! and %>来圈起你的声明,比如:

<%@ page import="java.util.*" %>

<HTML>

<BODY>

<%!

Date theDate = new Date();

Date getDate()

{

System.out.println( "In getDate() method" );

return theDate;

}

%>

Hello! The time is now <%= getDate() %>

</BODY>

</HTML>

上面的例子已经声明了变量和方法:一个Date变量theDate以及一个方法getDate。这两个从现在开始在scriptlets和表达式中都是有效的了,因为它们已经定义了。

但是不幸的是,上面的这个例子并不能正常工作:不管你怎么重载网页,日期都是相同的。其中的原因是这些声明,它们只在网页被装载的时候才被计算一次。这一点就象我们在Visual C++中创建一个类并定义变量的初始化值。

本节教程的练习为:修改上面的例子,增加另外一个函数computeDate来重新初始化theDate。并且增加一个scriptlet来每次调用computeDate。

回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

JSP由浅入深(7)—— JSP Directives
编译:ZSC/太平洋网络学院

在前面的教程中,我们已经使用了java.util.Date。可以有人就会问:为什么不只使用import java.util.*呢?其实,在JSPs中也可以使用import语句,但是它的语法跟普通的Java是有些差别的。下面给出一个例子:

<%@ page import="java.util.*" %>

<HTML>

<BODY>

<%

System.out.println( "Evaluating date now" );

Date date = new Date();

%>

Hello! The time is now <%= date %>

</BODY>

</HTML>

上面的代码中第一行我们调用了一个“directive”。这个JSP“directive”是以<%@字符为开头的。这是一个"page directive"。这个"page directive"可以包含所有的引入的项目。假如你为了引入多于一个的项目,你就可以利用逗号(,)来分隔项目,比如 :

<%@ page import="java.util.*,java.text.*" %>

在"page directive"中可以有多个JSP directives。除了"page directive"以外,其它有用的directives有include 和 taglib。在后面的教程中我们再对taglib进行详细的讨论。这里只讨论include directive。

回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

JSP由浅入深(8)—— JSP Tags
编译:ZSC/太平洋网络学院

JSP另外一个重要的语法是Tags(标记)。JSP Tags不是使用<%,而只是使用<字符。JSP Tag有点象HTML Tag 。JSP tags可以有一个“start tag”、一个“tag body”以及一个“end tag”。开始和结束的标志都可以使用标志的名字,都被圈在<和>字符里面。结束的标志是在字符<后面加一个反斜杆(/)字符。这个标志名字有一个嵌入的冒号(:)字符在里面,其中冒号前面的部分描述了标志的类型。举个例子吧:

<some:tag>

body

</some:tag>

如果标志不需要一个主体,那么开始和结束标志可以合成在一起,比如 :

<some:tag/>

这里我们利用一个/>替代了>字符,这样我们就可以快速地结束标志而不需要一个实体。这条语法跟XML的是一样的。

标志可以分成两种类型:一种是从外部标志库中转载的,另外一种是预先定义的标志。预先定义的标志是以jsp:字符开始的。举个例子吧,jsp:include是一个预先定义的标志,它用于包括其它的网页。

在前面的教程我们已经学习了“include directive”。其实它跟jsp:include是很相似的。它们都不是在原始文件中装载被包含的文件的文本,而是在运行的时候调用被包括的标志。下面是一个jsp:include 使用的例子:

<HTML>

<BODY>

Going to include hello.jsp...<BR>

<jsp:include page="hello.jsp"/>

</BODY>

</HTML>

现在将上面代码中的“jsp:include”改为“jsp:forward”看看它们有什么区别。其实这两个预先定义的标志是很有用的。

再给出本节的练习吧,编写一个JSP,使之根据一个布尔型(boolean)变量来对一个包含的文件。这里还是提示一下吧,要用到HTML和scriptlets的混合编程来处理JSP标志。

回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

JSP由浅入深(9)—— JSP Sessions
编译:ZSC/太平洋网络学院

在经典的网站上,访问者可以浏览几个网页并执行一些交互的行为。如果你在编写这样的网站,利用每一个用户的一些数据是非常有用的。为了这个目的,我们可以使用JSP中的"sessions"。

Session是一个跟用户相关的对象。当用户访问网站的时候,一些数据就被存放于session中,并在需要的时候从中取出数据。Session为不同的用户保存了不同了数据。

以下的网页将用户的名字放置于session中,并可以在其它地方来显示它。首先我们要制作一个表单,然后将它命名为GetName.html

<HTML>

<BODY>

<FORM METHOD=POST ACTION="SaveName.jsp">

What's your name? <INPUT TYPE=TEXT NAME=username SIZE=20>

<><INPUT TYPE=SUBMIT>

</FORM>

</BODY>

</HTML>

这个表单的目标是“SaveName.jsp”,它在session保存了用户的名字。

<%

String name = request.getParameter( "username" );

session.setAttribute( "theName", name );

%>

<HTML>

<BODY>

<A HREF="NextPage.jsp">Continue</A>

</BODY>

</HTML>

SaveName.jsp在session保存了用户了名字,并连接到另外一个网页NextPage.jsp。NextPage.jsp 显示了怎样取出被保存的名字:

<HTML>

<BODY>

Hello, <%= session.getAttribute( "theName" ) %>

</BODY>

</HTML>

如果你打开两种不同的浏览器,或者从两台不同的机器上运行两个浏览器,你可以在一个浏览器中放置一个名字,而在另外一个浏览器中放置另外的名字,但是两个名字都将被跟踪。Session保持跟踪直到超时,这时它就会假设用户没有访问网站了,所以就取消了session。

最后再布置一下本教程的联系:利用session,在上面的例子中增加一个用户的“age”属性。

回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

JSP由浅入深(10)—— Beans and Forms处理
编译:ZSC/太平洋网络学院

表单(Forms)是在网站交互的一个很普通的方法。JSP使表单处理更加简单。在JSP中处理表单的标准方法是定义一个“bean”。这个“bean”不是一个完全的Java bean。你只需在定义一个类使它有个区域,这个区域跟表单中的每一个区域相对应。这个类区域必须有“setters”来匹配表单区域的名字。举个例子,让我们修改一下前面教程的GetName.html并且收集Email地址和用户的年龄。具体代码修改如下:

<HTML>

<BODY>

<FORM METHOD=POST ACTION="SaveName.jsp">

What's your name? <INPUT TYPE=TEXT NAME=username SIZE=20><BR>

What's your e-mail address? <INPUT TYPE=TEXT NAME=email SIZE=20><BR>

What's your age? <INPUT TYPE=TEXT NAME=age SIZE=4>

<><INPUT TYPE=SUBMIT>

</FORM>

</BODY>

</HTML>

为了收集数据,我们要定义一个Java类,使它有“username”、“email”、“age”的区域,并且我们要提供“setter”方法“setUsername”、“setEmail”和“setAge”。这个“setter”方法只是一个以“set”开始其后是区域名的一种方法。区域名字的第一个字母要用大写的。所以如果区域为“email”,它的“setter”方法就为“setEmail”。同样的,“Getter”方法也类似定义,它只不过是用“get”来代替“set”而已。并且要使得setters和getters必须为公共的(public)。例如:

public class UserData {

String username;

String email;

int age;

public void setUsername( String value )

{

username = value;

}

public void setEmail( String value )

{

email = value;

}

public void setAge( int value )

{

age = value;

}

public String getUsername() { return username; }

public String getEmail() { return email; }

public int getAge() { return age; }

}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2024-5-14 03:21 , Processed in 0.804795 second(s), 96 queries .

回顶部