??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
http://www-128.ibm.com/developerworks/java/library/x-jaxp
Brett McLaughlin
Document Object Model (DOM)
Simple API for XML (SAX)
JDK1.4
javax.xml.parsers
javax.xml.transform
javax.xml.transform.dom
javax.xml.transform.sax
javax.xml.transform.stream
JDK5.0
javax.xml
javax.xml.datatype
javax.xml.namespace
javax.xml.parsers
javax.xml.transform
javax.xml.transform.dom
javax.xml.transform.sax
javax.xml.transform.stream
javax.xml.validation
javax.xml.xpath
严格来说Q?/span>
JAXP
q没有提供新的解?/span>
XML
的方法,但是它得我们更ҎC?/span>
DOM
或?/span>
SAX
来进行解析Q务,更能以一U?/span>
vendor-neutral
的方式来使用
DOM
?/span>
SAX
?/span>
JAXP
?/span>
SAX, DOM, JDOM
?/span>
dom4j
Q这四个都可以解?/span>
XML
Q没有可比较性,它ƈ没有提供一个新的解?/span>
XML
的方法?/span>
JAXP API, located in the
javax.xml.parsers
package. All of these classes sit on top of an existing parser.
其中?/span>
6
个类都是建立在已有的解析上面的?/span>
JDOM
?/span>
dom4j
都提供不同的模型来接受来?/span>
SAX/DOM
的数据,他们从内部来讲都是用了
SAX
Q不q是做了些修攏V?/span>
此外Q?/span>
Java 1.5
?/span>
Xerces
的包
org.apache.xerces
被放C
com.sun.org.apache.xerces.internal
First, com.sun.xml.tree.XMLDocument class is not part of JAXP. It is part of Sun's Crimson parser, packaged in earlier versions of JAXP.
Second, a major purpose of JAXP is to provide vendor independence when dealing with parsers. With JAXP, you can use the same code with Sun's XML parser, Apache's Xerces XML parser, and Oracle's XML parser.
先从
SAX
说vQ我们只用?/span>
DefaultHandler
c?/span>
(org.xml.sax.helpers
包中
)
p获得所有的
callbacks
Q只用在需要的Ҏ中加入实现的代码?/span>
Here's the typical SAX routine:
1
Q?/span>
Create a SAXParser instance using a specific vendor's parser implementation.
2
Q?/span>
Register callback implementations (by using a class that extends DefaultHandler, for example).
3
Q?/span>
Start parsing and sit back as your callback implementations are fired off.
SAX
必须
指定
XML
驱动Q如
org.apache.xerces.parsers.SAXParser
Q,?/span>
JAXP
提供了更好的选择Q只要我们提供什?/span>
XML
驱动Q在
classpath
中配|)Q它p用什么驱动,不需要改动代码?/span>
new SAXParserFactory.newSAXParser()
p?/span>
JAXP
SAXParser
c,q个cd装了
SAX parser (an instance of the SAX class
org.xml.sax.XMLReader
)
?/span>
In Listing 1, you can see that two JAXP-specific problems can occur in using the factory: the inability to obtain or configure a SAX factory, and the inability to configure a SAX parser.
The first of these problems, represented by a FactoryConfigurationError, usually occurs when the parser specified in a JAXP implementation or system property cannot be obtained.
The second problem, represented by a ParserConfigurationException, occurs when a requested feature is not available in the parser being used. Both are easy to deal with and shouldn't pose any difficulty when using JAXP.
SAXParser
?/span>
parse
Ҏ可以接受
SAX InputSource
Q?/span>
Java InputStream
或?/span>
URL in String form
可以通过
SAXParser
?/span>
getXMLReader()
Ҏ来获得底层的
SAX parser
Q?/span>
org.xml.sax.XMLReader
的实例)Q这样就可以使用各个
SAXParser
Ҏ?/span>
[
参照
Listing2]
使用
DOM
The only difference between DOM and SAX in this respect is that with DOM you substitute DocumentBuilderFactory for SAXParserFactory, and DocumentBuilder for SAXParser.
The major difference is that variations of the parse() method do not take an instance of the SAX DefaultHandler class. Instead they return a DOM Document instance representing the XML document that was parsed. The only other difference is that two methods are provided for SAX-like functionality:
The
javax.xml.transform.Source
interface is the basis for all input into JAXP and the transformation API. This interface defines only two methods --
getSystemId()
and
setSystemId(String systemId)
.
JAXP
提供了三个实?/span>
Source
接口的类Q?/span>
javax.xml.transform.dom.DOMSource
passes a DOM
Node
(and its children) into JAXP.
javax.xml.transform.sax.SAXSource
passes the results of SAX callbacks (from an
XMLReader
) into JAXP.
javax.xml.transform.stream.StreamSource
passes XML wrapped in a
File
,
InputStream
, or
Reader
into JAXP.
javax.xml.transform.Result
也有两个ҎQ?/span>
getSystemId()
?/span>
setSystemId(String systemId)
?/span>
同样有三个实现类Q?/span>
javax.xml.transform.dom.DOMResult
passes transformed content into a DOM
Node
.
javax.xml.transform.sax.SAXResult
passes the results of a transformation to a SAX
ContentHandler
.
javax.xml.transform.stream.StreamResult
passes the transformed *ML into a
File
,
OutputStream
, or
Writer
.
JAXP this way has two significant limitations:
Transformer
object processes the XSL stylesheet each and every time
transform()
is executed.
Transformer
are not thread-safe. You can't use the same instances across multiple threads.
Transformer
实例不是U程安全的,不能通过多线E去使用同一?/span>
Transformer
实例?/span>
javax.xml.transform.Templates
.
The
Templates
interface is thread-safe (addressing the second limitation) and represents a compiled stylesheet (addressing the first limitation).
Templates
实例是线E安全的Q可以处理一?/span>
XSL
Q解决了上述两个限制?/span>
如果只要对一?/span>
stylesheet
q行一?/span>
transformation
Q那么用
Transformer
比较快,没有必要选择
Templates
对象。但是考虑到线E安全问题,q是推荐使用
Templates
?/span>
JAXP
默认使用
Xalan-J
Q如果要使用其它
parser
Q可以通过
javax.xml.transform.TransformerFactory
修改?/span>
java -D javax.xml.transform.TransformerFactory=[transformer.impl.class] TestTransformations
simple.xml simple.xsl
http://sourceforge.net/docman/display_doc.php?docid=31070&group_id=1
Subversion
官方|站Q查?/span>
http://subversion.tigris.org/
ƣ慰的是q里有个|站提供一本免费的、非常棒?/span>
SVN
图书Q可以选择在线查看或者下?/span>
PDF
Q?/span>
SVN
使用者必诅R?/span>
http://svnbook.red-bean.com/
各个版本控制pȝ功能比较的文?/span>
http://better-scm.berlios.de/comparison/comparison.html
Subversion
使用手记
中文英文对照
http://robinlet.bokee.com/2866408.html
一文章介l如何将
CVS
?/span>
Repository
转换?/span>
SNV
转换Ҏ来自q个E序
http://cvs2svn.tigris.org/
官方的那本书是最好的教程Q网上还有大量的安装和用的文章可以借鉴Q这里简单罗列几?/span>
SVN
辅助的YӞ
1
?/span>
SubVersion
Q从
http://subversion.tigris.org/
下蝲Q是实现服务pȝ的YӞ必装的?/span>
2
?/span>
TortoiseSVN
Q从
http://tortoisesvn.tigris.org/
下蝲Q是很不错的
SVN
客户端程序,?/span>
windows
外壳E序集成?/span>
windows
资源理器和文g理pȝ?/span>
Subversion
客户端,用v来很方便?/span>
3
?/span>
SVNService.exe
Q从
http://dark.clansoft.dk/~mbn/svnservice/
下蝲Q是专ؓ
SubVersion
开发的一个用来作?/span>
Win32
服务挂接的入口程序?/span>
4
?/span>
AnkhSVN
Q从
http://ankhsvn.tigris.org/
下蝲Q这是一个专?/span>
Visual Studio
提供
SVN
的插件?/span>
5
?/span>
Subversive
Q从
http://www.polarion.org/p_subversive.php
下蝲Q一个ؓ
Eclipse
提供
SVN
的插Ӟ据说已经?/span>
Eclipse
自带?/span>
CVS
功能有一拹{?/span>
6
、还有很多很?/span>
SVN
相关的工具以及?/span>
TIP
介绍Q大家可以上官方的相关链接页面中查看Q地址Q?/span>
http://subversion.tigris.org/links.html
Linux
下Y件的安装主要有三U不同的形式?/span>
W一U安装文件名?/span>
xxx.tar.gz
Q?/span>
W二U安装文件名?/span>
xxx.i386.rpm
Q?/span>
q有一U是
xxx.src.rpm
?/span>
以第一U方式发行的软g多ؓ以源码Ş式发送的Q?/span>
W二U方式则是直接以二进制Ş式发送的Q?/span>
W三U是
rpm
格式发布的源码?/span>
对于W一U?/span>
[xxx.tar.gz]
Q安装方法如下:
1 .
首先Q将安装文g拯至你的目录中。例如,如果你是?/span>
root
w䆾d上的Q就Y件拷贝至
/root
中?/span>
#cp xxx.tar.gz /root
2 .
׃该文件是被压~ƈ打包?/span>
,
应对其解压羃。命令ؓQ?/span>
#tar xvzf filename.tar.gz
3.
执行该命令后Q安装文件按路径Q解压羃在当前目录下。用
ls
命o可以看到解压~后的文件。通常在解压羃后生的文g中,?/span>
“Install?/span>
的文件。该文g为纯文本文gQ详l讲qC该Y件包的安装方法?/span>
4.
执行解压~后产生的一个名?/span>
configure
的可执行脚本E序。它是用于检查系l是否有~译时所需的库Q以及库的版本是否满编译的需要等安装所需要的pȝ信息。ؓ随后的编译工作做准备。命令ؓQ?/span>
#./configure
5.
查通过后,生成用于编译的
MakeFile
文g。此Ӟ可以开始进行编译了。编译的q程视Y件的规模和计机性能的不同,所耗费的时间也不同。命令ؓQ?/span>
#make
?/span>
6.
成功~译后,键入如下的命令开始安装:
#make install
7.
安装完毕Q应清除~译q程中生的临时文g和配|过E中产生的文件。键入如下命令:
#make clean
#make distclean
xQY件的安装l束?/span>
对于W二U?/span>
[xxx.i386.rpm]
Q其安装Ҏ要简单得多?/span>
同第一U方式一P安装文件拷贝至你的目录中。然后?/span>
rpm
来安装该文g。命令如下:
#rpm -i filename.i386.rpm
rpm
自动将安装文g解包QƈY件安装到~省的目录下。ƈY件的安装信息注册?/span>
rpm
的数据库中。参?/span>
i
的作用是?/span>
rpm
q入安装模式?/span>
软g的卸?/span>
1.
软g的卸载主要是使用
rpm
来进行的。卸载Y仉先要知道软g包在pȝ中注册的名称。键入命令:
#rpm -q -a
卛_查询到当前系l中安装的所有的软g包?/span>
2.
定了要卸蝲的Y件的名称Q就可以开始实际卸载该软g了。键入命令:
#rpm -e [package name]
卛_卸蝲软g。参?/span>
e
的作用是?/span>
rpm
q入卸蝲模式。对名ؓ
[package name]
的Y件包q行卸蝲。由于系l中各个软g包之间相互有依赖关系。如果因存在依赖关系而不能卸载,
rpm
给予提Cƈ停止卸蝲。你可以使用如下的命令来忽略依赖关系Q直接开始卸载:
#rpm -e [package name] -nodeps
忽略依赖关系的卸载可能会Dpȝ中其它的一些Y件无法?/span>
对于W三U?/span>
[xxx.src.rpm]
Q安装也很简?/span>
拯到目标目录,然后执行
#rpmbuild --rebuild xxx.src.rpm
~译文g
然后q入
#cd /usr/src/redhat(or other)/RPMS/i386/
执行
#rpm -ivh xxxxx.rpm
安装
上面的方法是?/span>
Redhat 8.0
以及
Mandrake9.0
来说的,如果是低于这个版本。应该用
#rpm --rebuild *.src.rpm
?/span>
C
?/span>
C++
~写的程序不同,
Java
E序q不是一个可执行文gQ而是p多独立的cL件组成,每一个文件对应于一?/span>
Java
cR此外,q些cL件ƈ非立卛_部都装入内存Q而是ҎE序需要装入内存?/span>
ClassLoader
?/span>
JVM
中将c装入内存的那部分。而且Q?/span>
Java ClassLoader
是?/span>
Java
语言~写的。这意味着创徏您自q
ClassLoader
非常ҎQ不必了?/span>
JVM
的微细节?/span>
Java
?/span>
classloader
不但可以使你q行本地?/span>
class
c?/span>
,
你也可以定制
classloader
q行来自q程的字节代?/span>
.
ClassLoader
的基本目标是对类的请求提供服务。当
JVM
需要用类Ӟ它根据名U向
ClassLoader
hq个c,然后
ClassLoader
试图q回一个表C个类?/span>
Class
对象?/span>
通过覆盖对应于这个过E不同阶D늚ҎQ可以创建定制的
ClassLoader
。通常当你需要动态加载资源的时?/span>
,
你至有三个
ClassLoader
可以选择
:
1.
pȝcd载器Q应用类加蝲器)
(system classloader or application classloader)
2.
当前cd载器
3.
当前U程cd载器
W一U?/span>
:
pȝcd载器
pȝcd载器
(system classloader).
q个cd载器处理
-classpath
下的cd载工?/span>
,
可以通过
ClassLoader.getSystemClassLoader()
Ҏ调用
.
ClassLoader
下所有的
getSystemXXX()
的静态方法都是通过q个Ҏ定义?/span>
.
在你的代码中
,
你应该尽量少地调用这个方?/span>
,
以其它的cd载器作ؓ代理
.
否则你的代码只能工作在单的命o行应用中
,
q个时候系l类加蝲?/span>
(system classloader)
?/span>
JVM
最后创建的cd载器
.
一旦你把代码移?/span>
EJB, Web
应用?/span>
Java Web Start
应用?/span>
,
一定会出问?/span>
.
Class.loadClass( String name, boolean resolve );
name
参数指定?/span>
JVM
需要的cȝ名称Q该名称以包表示法表C,?/span>
Foo
?/span>
java.lang.Object
?/span>
resolve
参数告诉Ҏ是否需要解析类。在准备执行cM前,应考虑c解析。ƈ不L需要解析。如?/span>
JVM
只需要知道该cL否存在或扑և该类的超c,那么׃需要解析?/span>
Ҏ
defineClass
?/span>
ClassLoader
的主要诀H?/span>
该方法接受由原始字节l成的数lƈ把它转换?/span>
Class
对象。原始数l包含如从文件系l或|络装入的数据?/span>
defineClass
理
JVM
的许多复杂、神U和倚赖于实现的斚w
--
它把字节码分析成q行时数据结构、校验有效性等{。不必担心,您无需亲自~写它。事实上Q即使您惌q么做也不能覆盖它,因ؓ它已被标记成最l的?/span>
Ҏ
findSystemClass
findSystemClass
Ҏ从本地文件系l装入文件。它在本地文件系l中LcLӞ如果存在Q就使用
defineClass
原始字节{换成
Class
对象Q以该文g转换成类。当q行
Java
应用E序Ӟq是
JVM
正常装入cȝ~省机制
.
如果
ClassLoader
不能扑ֈc,它会h父代
ClassLoader
来执行此Q务。所?/span>
ClassLoaders
的根是系l?/span>
ClassLoader
Q它会以~省方式装入c?/span>
--
卻I从本地文件系l?/span>
Ҏ
findLoadedClass
充当一个缓?/span>
当请?/span>
loadClass
装入cLQ它调用该方法来查看
ClassLoader
是否已装入这个类Q这样可以避免重新装入已存在cL造成的麻烦。应首先调用该方法?/span>
让我们看一下如何组装所有方法?/span>
loadClass
实现CZ执行以下步骤Q?/span>
Q这里,我们没有指定生成cL件是采用了哪U技术,它可以是?/span>
Net
上装入、或者从归档文g中提取、或者实时编译。无论是哪一U,那是U特D的奇方式Q我们获得了原始类文g字节。)
1.
调用
findLoadedClass
来查看是否存在已装入的类?/span>
2.
如果没有Q那么采用那U特D的奇方式来获取原始字节?/span>
3.
如果已有原始字节Q调?/span>
defineClass
它们{换成
Class
对象?/span>
4.
如果没有原始字节Q然后调?/span>
findSystemClass
查看是否从本地文件系l获取类?/span>
5.
如果
resolve
参数?/span>
true
Q那么调?/span>
resolveClass
解析
Class
对象?/span>
6.
如果q没有类Q返?/span>
ClassNotFoundException
?/span>
7.
否则Q将c返回给调用E序?/span>
W二U选择
:
当前上下文环境下的类加蝲?/span>
.
CUT Coding&Unit Test /Construct
~码及单元测?/span>
DD Detail Design
详细设计
HLD High Level Design
概要设计
LLD Low Level Design
详细设计
SD System Design
pȝ设计
SRS System/Software Requirement Specification
软g需求规D?/span>
UT Unit Testing
单元试
IT Integration Test
集成试
ST System Test
pȝ试
PT Performance Test
性能试
UAT User Acceptance Test
用户验收试
FURPS+
Functionality, Usability, Reliability, Performance,Supportability, + Localizability, Portability
功能性,可用性,可靠性,性能Q支持性+
本地化,可移植?/span>
IC (IGC)
Inter-group Coordination ( CMM Level 3 KPA )
l间协调Q?/span>
CMM
W三U的
KPA
Q?/span>
ISM
Integrated Software Management ( CMM Level 3 KPA )
集成软g理Q?/span>
CMM
W三U的
KPA
Q?/span>
KPA Key Process Area
关键q程区域
LC Lifecycle
生命周期
OOA Object Oriented Analysis
面对对象分析
OOD Object Oriented Design
面向对象设计
OPD
Organization Process Definition ( CMM Level 3 KPA )
l织q程定义Q?/span>
CMM
W三U的
KPA
Q?/span>
OPF
Organization Process Focus ( CMM Level 3 KPA )
l织q程焦点Q?/span>
CMM
W三U的
KPA
Q?/span>
OSSP
Organization Standard Software Process
l织标准软gq程
PCB
Process Capability Baselines
q程能力基准
PCM
Process Change Management ( CMM Level 5 KPA )
q程更改理Q?/span>
CMM
W五U的
KPA
Q?/span>
PDSP
Project's Defined Software Process
目定义的Y件过E?/span>
PI
Process Improvement
q程改进
PMR
Project Management Review
目理评审
PM
Project Manager
目l理
PP
Project Planning
目{划
PR
Peer Reviews ( CMM Level 3 KPA)
同行评审Q?/span>
CMM
W三U的
KPA
Q?/span>
QC
Quality Champion
目
SQA
人员
QP
Quality Plan
质量计划
QPM
Quantitative Process Management ( CMM Level 4 KPA )
定量q程理Q?/span>
CMM
W四U的
KPA
Q?/span>
RA
Requirement Analysis
需求分?/span>
RCA
Root Cause Analysis
Ҏ原因分析
RFP
Request for Proposal
提议和请?/span>
RM
Requirements Management ( CMM Level 2 KPA )
需求管理(
CMM
W二U的
KPA
Q?/span>
ROI
Return On Investment
投资收益?/span>
SCCB
Software Configuration Control Board
软g配置控制l?/span>
SCM
Software Configuration Management ( CMM Level 2 KPA)
软g配置理Q?/span>
CMM
W二U的
KPA
Q?/span>
SCMP
Software Configuration Management Plan
软g配置理计划
SDLC
Software Development Life Cycle
软g开发生命周?/span>
SEI
Software Engineering Institute
软g工程研究所
SEPG
Software Engineering Process Group
软g工程q程l?/span>
SMR Senior Management Review
高理评审
SPC Statistical Process Control
l计q程控制
SPE Software Product Engineering ( CMM Level 3 KPA )
软g产品工程Q?/span>
CMM
W三U的
KPA
Q?/span>
SPI Software Process Improvement
软gq程改进
SPP Software Project Plan ( CMM Level 2 KPA )
软g目{划Q?/span>
CMM
W二U的
KPA
Q?/span>
SPTO Software Project Tracking & Oversight
软g目跟踪和监?/span>
SQA Software Quality Assurance ( CMM Level 2 KPA )
软g质量保证Q?/span>
CMM
W二U的
KPA
Q?/span>
SQM Software Quality Management
软g质量理
DP Defect Prevention ( CMM Level 5 KPA )
~陷预防
(CMM
W五U的
KPA)
SSD System Sequence Diagram
pȝ时序?/span>
SSM Software Subcontract Management ( CMM Level 2 KPA )
软g子合同管理(
CMM
W二U的
KPA
Q?/span>
TCM Technology Change Management
技术改革管?/span>
TP Training Plan / Training Program ( CMM Level 3 KPA )
培训大纲Q?/span>
CMM
W三U的
KPA
Q?/span>
TQM Total Quality Management
总质量管?/span>
UC Use Case
用例
UCD Use Case Diagram
用例?/span>
WBS Work Breakdown Structure 工作分解l构
和目前项目要求一P所用到的Y件列表如下:
1 Q?/span> eclipse-SDK-3.1M7-win32
?/span> http://www.eclipse.org/downloads/index_topic.php 上下载相应版?/span>
2 Q?/span> wtp-R-1.0.3-200607290929
?/span> http://download.eclipse.org/webtools/downloads/ 下蝲对应 eclipse3.1 的应该是 R1.0 版本
另根?/span> WTP 要求Q还M?/span>
JEM-SDK-1.1.0.1.zip
Q?/span>
GEF-SDK-3.1.1.zip
Q?/span>
emf-sdo-xsd-SDK-2.1.2.zip
{?/span>
3 Q?/span> tomcatPluginV3
http://www.sysdeo.com/eclipse/tomcatplugin
上可下蝲
4 Q?/span> Tomcat 5.0
?/span>
http://tomcat.apache.org/
下蝲
5
Q?/span>
j2sdk1.4.2
安装步骤Q?/span>
1 ?/span> Java 环境安装Q?/span> 配置 JAVA_HOME Q?/span> PATH
2 ?/span> Tomcat 环境安装Q?/span> 配置 TOMCAT_HOME Q?/span> CATALINA_HOME
3 ?/span> Eclipse 3.1 解压~?/span>
4 ?/span> Eclipse 几个插g解压~?/span> [wtp-R-1.0.3-200607290929 Q?/span> JEM-SDK-1.1.0.1.zip Q?/span> GEF-SDK-3.1.1.zip Q?/span> emf-sdo-xsd-SDK-2.1.2.zip Q?/span> tomcatPluginV3 ]
5 ?/span> lomboz 插g安装 [ 可?/span> ]
|上很多配置用到?/span> lomboz 插gQ?/span> http://forge.objectweb.org/project/showfiles.php?group_id=97 Q我没有安装不知道有什么媄响?/span>
试例子Q?/span>
1
Q新建工E:选择
Dynamic Web Project
Q点
Next
2 Q输?/span> project name Q点 Next
3 Q点?/span> Finish Q然后点击项?/span> TestJSP 新徏 JSP Q点?/span> Next
4
Q输?/span>
index.jsp
建在
webContent
目录下,点击
Next
5 Q因为用于测试,使用 jsp 模板卛_Q点?/span> Finish
6 Q编?/span> index.jsp Q添加点试信息 Testing...
7 Q右键点?/span> index.jsp 选择 Run as->Run on server
8 Q选择 Tomcat5
9 Q设?/span> server 相关参数
10 Q点?/span> Finish ?/span> Server ׃启动Q然后{?/span> index 面。到此就成功配置完毕?/span>
最q又开始要使用
JSP
Q于是写下这些便于将来参考!
Tomcat 5.5
开?/span>
Servlet
?/span>
JavaBean
的配|?/span>
1
?/span>
JDK
安装?/span>
C:\jdk
JAVA_HOME=C:\jdk
PATH=C:\jdk
2
?/span>
Tomcat
安装?/span>
C:\Tomcat,
配置环境变量如下Q?/span>
CATALINA_HOME=C:\Tomcat
TOMCAT_HOME=C:\Tomcat
然后修改环境变量中的
CLASSPATH
Q把
Tomat
安装目录下的
common\lib
下的
servlet-api.jar
加到
CLASSPATH
中去Q修改后?/span>
CLASSPATH
为:
C:\Tomcat\common\lib\servlet-api.jar
W?/span>
1
步:建立自己的开发目?/span>
1.
?/span>
Tomcat
的安装目录下
webapps
目录
2.
?/span>
webapps
目录下新Z个目?/span>
myapp
3.myapp
下新Z个目?/span>
WEB-INF
Q目录名U是区分大小写)
4.WEB-INF
下新Z个文?/span>
web.xml
Q将
tomcat\conf\web.xml
直接拯q来?/span>
OK
W?/span>
2
步:建立自己?/span>
Servlet
目录
1.
新徏
servlet
E序Q文件名?/span>
Test.java
Q内容如下:
package test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Test extends HttpServlet
{
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{ PrintWriter out=response.getWriter(); out.println(" This is a servlet test.");
out.flush();
}
}
2 .
~译
Test.java
3 .
?/span>
Test.class
剪切?/span>
..\webapps\myapp\WEB-INF\classes\test\
?/span>
4 .
修改
webapps\myapp\WEB-INF\web.xml
Q改?/span>
servlet
?/span>
servlet-mapping
的内?/span>
:
<servlet-name>Test</servlet-name>
<servlet-class>test.Test</servlet-class>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
5 .
启动
Tomcat
Q?/span>
http://localhost:8080/myapp/Test
看到输出
This is a servlet test.
说明~写?/span>
servlet
成功了?/span>
W?/span>
3
步:建立自己?/span>
Bean
1.
新徏一?/span>
java
E序
TestBean.java
Q内容如下:
package test;
public class TestBean{
public String name = "TestBean Testing ";
public String test()
{ return this.name; }
}
2 .
~译
TestBean.java
产生
TestBean.class
3 .
?/span>
TestBean.class
文g剪切?/span>
\webapps\myapp\WEB-INF\classes\test
下,
4 . \myapp
目录下新Z?/span>
TestBean.jsp
文gQ文件内容ؓQ?/span>
<html><body>
<jsp:useBean id="tb" scope="page" class="test.TestBean" />
This is <%=tb.test()%>
</body></html>
5
重启
Tomcat
Q启动浏览器Q输?/span>
http://localhost:8080/myapp/TestBean.jsp
如果看到输出
This is TestBean Testing
p明编写的
Bean
成功?/span>