這篇文章講述搭建筆者(一個(gè)門(mén)外漢)學(xué)習(xí)webwork的第一步-----搭建webwork環(huán)境,并測(cè)試第一個(gè)程序.
[過(guò)程]
1.安裝j2sdk.略
2.安裝tomcat,略
3.解壓webwork2.1.7,略
4.為tomcat安裝webwork支持
拷貝webwork2.1.7.jar和${webwork_home}\core\*.jar到${tomcat_home}\sharedlib目錄中.
5.撰寫(xiě)login.jsp,loginsucess.jsp,loginfailed.jsp,LoginAction.java.
我們登錄login.jsp,輸入用戶名,post之后,請(qǐng)求將提交給LoginAction處理,如果成功則返回login-success.jsp,否則返回loginfailed.jsp
我使用的eclipse3.0.1,并安裝了eclipseWork插件(不過(guò)整個(gè)過(guò)程)沒(méi)有合理的使用它,郁悶),
login.jsp
<html>
<head>
<title>WebWork Tutorial - Lesson 3 - Example 1</title>
</head>

<body>

<p>
Click the [post] button below to Login.
</p>

<form action="login.action" method="post">
<p>user:<input type="text" name="user" value="" /></p>
<p>password:<input type="password" name="password" value="" /></p>
<p><input type="submit" value="post" /></p>
</form>

</body>
</html>

login-success.jsp


<%
@ taglib uri="webwork" prefix="ww" %>
<html>
<head>
<title>welcome to salary</title>
</head>
<body>

<font color="green">

<ww:property value="user" /> has logon [SalaryQueryModule]

</font>
<br>



</body>
</html>

login-failed.jsp


<%
@ taglib uri="webwork" prefix="ww" %>
<html>
<head>
<title>failed login</title>
</head>
<body>
<font color="red">
error login by [<ww:property value="user" /> ],invalid user or pwd
</font>
<br>
</body>
</html>

web.xml,位于web-inf目錄下
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>My WebWork Application</display-name>
<servlet>
<servlet-name>webwork</servlet-name>
<servlet-class>
com.opensymphony.webwork.dispatcher.ServletDispatcher
</servlet-class>

<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>webwork</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<taglib>
<taglib-uri>webwork</taglib-uri>
<taglib-location>
/WEB-INF/lib/webwork-2.1.7.jar
</taglib-location>
</taglib>
</web-app>

xwork.xml位于web-inf\classes目錄下
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd">

<xwork>
<!-- Include webwork defaults (from WebWork JAR). -->
<include file="webwork-default.xml" />
<!-- Configuration for the default package. -->
<package name="default" extends="webwork-default">
<!-- Default interceptor stack. -->
<default-interceptor-ref name="defaultStack" />
<!-- Action: Lesson 03: HelloAction. -->
<action name="login" class="com.cdpgc.salary.LoginAction">
<result name="failed" type="dispatcher">login-failed.jsp</result>
<result name="success" type="dispatcher">login-success.jsp</result>
</action>
</package>
</xwork>

LoginAction.java
1
/**//*
2
* Created on 2005-8-4
3
*
4
* TODO To change the template for this generated file go to
5
* Window - Preferences - Java - Code Style - Code Templates
6
*/
7
package com.cdpgc.salary;
8
9
import com.opensymphony.xwork.ActionSupport;
10
11
/**//**
12
* @author codemyth
13
*
14
* TODO To change the template for this generated type comment go to Window -
15
* Preferences - Java - Code Style - Code Templates
16
*/
17
public class LoginAction extends ActionSupport
{
18
19
String user;
20
String password;
21
22
/**//*
23
* (non-Javadoc)
24
*
25
* @see com.opensymphony.xwork.Action#execute()
26
*/
27
public String execute() throws Exception
{
28
// TODO verify user-password
29
if (user.equals("bbb"))
30
return super.SUCCESS;
31
else
32
return "failed";
33
}
34
/**//**
35
* @return Returns the user.
36
*/
37
public String getUser()
{
38
return user;
39
}
40
/**//**
41
* @param user
42
* The user to set.
43
*/
44
public void setUser(String user)
{
45
this.user = user;
46
}
47
/**//**
48
* @return Returns the password.
49
*/
50
public String getPassword()
{
51
return password;
52
}
53
/**//**
54
* @param password
55
* The password to set.
56
*/
57
public void setPassword(String password)
{
58
this.password = password;
59
}
60
}
61
6.發(fā)布代碼
我們可以直接制定tomcat到開(kāi)發(fā)環(huán)境中讀取,在${tomcat_home}\conf\catalina\localhost 目錄新建一個(gè)文件example.xml,包含以下內(nèi)容
<Context path="/salary" docBase="D:/tools/Develop/ide/eclipse-SDK-3.0.2-win32/eclipse/workspace/salary/webroot" unpackWAR="True" />
這是一個(gè)tomcat支持的xml片斷 Fragment,它的名稱(chēng)無(wú)所謂,tomcat會(huì)讀取它并將該docbase指定的目錄作為名叫salary的虛擬目錄.
整個(gè)過(guò)程是這樣的
1.login.jsp中點(diǎn)擊submit按紐后,請(qǐng)求將被發(fā)送到web容器的login.action,
2.web容器檢索web.xml,通過(guò)
<servlet-mapping>
<servlet-name>webwork</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
這一段得到webwork關(guān)鍵字,再通過(guò)
<servlet>
<servlet-name>webwork</servlet-name>
<servlet-class>
com.opensymphony.webwork.dispatcher.ServletDispatcher
</servlet-class>

<load-on-startup>1</load-on-startup>
</servlet>

將請(qǐng)求轉(zhuǎn)發(fā)給com.opensymphony.webwork.dispatcher.ServletDispatcher類(lèi)來(lái)處理,這個(gè)類(lèi)會(huì)讀取xwork.xml文件
3.通過(guò)和最初login.jsp提交的"login.action"中去掉web.xml中的定義的".action", 得到"login",在xwork.xml中的
<action name="login" class="com.cdpgc.salary.LoginAction">
<result name="failed" type="dispatcher">login-failed.jsp</result>
<result name="success" type="dispatcher">login-success.jsp</result>
</action>

找到"login"的定義,并尋找com.cdpgc.salary.LoginAction來(lái)處理這個(gè)請(qǐng)求,當(dāng)該對(duì)象的execute()方法返回
<result>節(jié)點(diǎn)"name"屬性定義的字符串的時(shí)候,將結(jié)果使用某個(gè)jsp來(lái)響應(yīng).這里是
success->login-success.jsp
failed->login-failed.jsp
4.兩個(gè)jsp中使用了
<ww:property value="user" />
來(lái)訪問(wèn)處理類(lèi)(com.cdpgc.salary.LoginAction)的屬性,它依賴(lài)于

<%
@ taglib uri="webwork" prefix="ww" %>
定義的標(biāo)簽庫(kù),而這個(gè)標(biāo)簽庫(kù)定義中的uri依賴(lài)于web.xml中的
<taglib>
<taglib-uri>webwork</taglib-uri>
<taglib-location>
/WEB-INF/lib/webwork-2.1.7.jar
</taglib-location>
</taglib>

定義的taglib-uri名稱(chēng)
另外,在LoginAction.java中webwork會(huì)將發(fā)出請(qǐng)求的form中的值--------在<input type='xxx' name='xxx'>中的值
填入到自己的屬性中(如果有同名屬性的化),這樣我們可以獲得請(qǐng)求參數(shù).在處理完畢后,同樣可以設(shè)置它,
而在結(jié)果jsp中,webwork又會(huì)將該值提供給jsp訪問(wèn),當(dāng)然還是基于名稱(chēng)相同.
在整個(gè)過(guò)程中,我沒(méi)有使用eclipseWork插件的任何功能,原因是---------我不會(huì)用
,曾經(jīng)在項(xiàng)目屬性中設(shè)置過(guò)xwork.xml是哪個(gè)xml,但是現(xiàn)在設(shè)置不了了,不知道為什么,并且也不知道如何提高開(kāi)發(fā)效率,希望有人能幫幫我.謝謝.