QQ登录

只需要一步,快速开始

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

jsp由浅入深

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 00:12 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
$ V( b* f! c2 y6 P' a/ G6 J0 E# _2 _5 Z5 e) s9 z( p) i& y3 Y1 y: \* L3 w# H1 G4 K# d9 [; d1 O L) ^; B: e, B" D* h) X9 D! _( @4 A5 S! C* [( Y3 ^; S9 b
! l. f& A% W( b) U( \) s* }+ b! R ' [* o) s2 `+ K; [; s! b! l, T( ?* e! U2 m# E* R1 i: z) P4 `, r1 z- N8 M( K) D9 P$ Z, K6 o n) s5 k$ }" x' a+ V( n! {$ g2 I5 u/ @3 ]0 {4 G" U, p N/ X; T+ m0 ]- @# k" e) ^9 B* Z. ?& K0 S7 l0 w0 L# [3 y5 _6 ~& n1 L8 i8 s. f& J% X4 S" O) N/ [% J# ?9 `1 M
" }/ F9 C; |/ w, c% ?
JSP由浅入深(1)—— 熟悉JSP服务器
( M/ z7 l; C0 H# T
i& A& M% M: r S9 [3 _
$ m& V% \9 g U& D/ V, f
编译:ZSC/太平洋网络学院
* P( U# s- w& h
\7 q( _# R' u* `

熟悉JSP服务器

0 }# k" L0 q+ b. A, N

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

1 U) F% y) B/ z( Q

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

, m0 p- t, ^, a' Q3 s/ {

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

4 c- \" j+ E" k$ u

Blazix (1.5 Megabytes, JSP, Servlets and EJBs) ; \2 s& @& O$ n1 V2 e$ ^; c1 s/ k5 B 来自www.blazix.com/blazix.html

+ l/ |* Y8 y) f; T

ServletExec (3.8 Megabytes, JSP and Servlets) 8 y( i3 I$ B* T" n2 t4 S来自www.unifyeware.com/servletExec/

9 T V6 \, h# O1 }

JRun (11 Megabytes, JSP, Servlets and EJBs) 3 B) D3 v4 ]' N+ {8 M7 Q来自www.jrun.com/

) i& Q. R+ O) {8 k- o

WebLogic(44 Megabytes, JSP, Servlets and EJBs) " b) w4 A* e9 j7 ]/ l4 e3 o T2 w9 ]来自www.beasys.com/

; Y4 z; X0 m1 |; N% M1 g

WebSphere (105 Megabytes, JSP, Servlets and EJBs) ! }$ } e( v9 k+ r9 @来自www-4.ibm.com/sofeware/webservers/

' u+ L( M' s. Y% ~) b

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

$ l$ n7 {5 b2 v- H+ T

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

2 |- K" ~1 S+ ~) ~$ k8 N

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

3 s+ N; e' i& }* S

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

- i$ u6 _6 q0 c" J

<HTML>

2 a! r/ O* ], R* x# L, d, N

<BODY>

" r' |9 E- r+ v/ C

Hello, world

5 e/ R5 y& Q+ h. p* Z n

</BODY>

, q' H5 l0 J& [9 P

</HTML>

* a9 F0 I$ p6 _. y

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

) Z0 Q* {% g4 G, ^

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-9-22 15:07 , Processed in 0.684547 second(s), 97 queries .

回顶部