寫教程的目的并不是為了顯示自己的高深,而是幫助他人快速入門,因此我這里不強(qiáng)調(diào)太多struts2底層的東西,但是也會(huì)介紹一些必須了解的東西。好了,廢話少說(shuō),開(kāi)始吧!
首先介紹下我的開(kāi)發(fā)環(huán)境:eclipse3.5+jetty6+maven2+struts2.1.6。按照maven2規(guī)范,我們新建一項(xiàng)目Struts2Demo,建立源文件夾src/main/java和src/main/resources,建立webapp目錄src/main/webapp,在webapp目錄下建立WEB-INF目錄,并創(chuàng)建一個(gè)web.xml文件。當(dāng)然這些你完全可以使用maven2的Archetype插件創(chuàng)建。建立好的目錄如下圖:

之后就應(yīng)該先引入struts2依賴了,我們使用m2eclipse可以方便地引入struts2依賴的包,首先enable maven dependency management,然后就自動(dòng)生成了pom.xml,接下來(lái)引入struts-core-2.1.6.jar,可以看到,struts2-core所依賴的jar包都給自動(dòng)下載下來(lái)了,用maven2就是方便,而且能最大程度避免版本沖突問(wèn)題。struts2.1.6依賴的包如下圖(不用maven的可以一個(gè)個(gè)下):

依賴問(wèn)題解決后,就該開(kāi)始開(kāi)發(fā)了,在我們的web.xml配置struts2的filter(注意:版本不同filter可能不一樣,詳細(xì)可以看
struts2官方的guide)。我的web.xml代碼:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="Struts2Demo" 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">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>home.action</welcome-file>
</welcome-file-list>
</web-app>
然后我們?cè)趕rc/main/resources下創(chuàng)建struts.xml,敲入以下代碼:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="GettingStarted" extends="struts-default" namespace="/">
<action name="home">
<result>/index.jsp</result>
</action>
<action name="gettingStarted">
<result>/WEB-INF/pages/getting_started/first_action_input.jsp</result>
</action>
<action name="myFirstAction" class="org.mickey.struts2demo.GettingStarted.MyFirstAction">
<result name="success">/WEB-INF/pages/getting_started/first_action_result.jsp</result>
</action>
</package>
</struts>
稍作解釋哈,前四行照搬就可以了,然后一個(gè)struts配置文件必須是以<struts>為根的,<package>是包,主要包括name和namespace,name只是一個(gè)普通標(biāo)識(shí)而已,保證全局唯一即可,namespace就是我們通過(guò)url訪問(wèn)時(shí)的所謂的名空間,比如namespace="/mickey",package下有一個(gè)action名為test,那么我們通過(guò)url訪問(wèn)的時(shí)候就是http://host:port/mickey/test.action。namespace不一定只有一個(gè)/,如"/mickey/minnie"都可以。我這里的package繼承了struts-default包,這個(gè)包能在struts-core-2.1.6.jar中找到,在struts-default.xml里面,這個(gè)default包包含了一些攔截器,一些result types等,深入的東西請(qǐng)留意以后的文章。
<action>標(biāo)簽主要包括name,class,method屬性,name就是通過(guò)url訪問(wèn)的action的名字,如剛剛的例子就是name="test", class就是定位處理這個(gè)action的Action類,struts2中的Action只是pojo而已,十分簡(jiǎn)單。method就是指定用Action類中的哪個(gè)方法來(lái)處理這個(gè)action,如果不指定method,默認(rèn)使用execute方法,看看我的struts.xml吧,綠色底那塊,我們把class指向了org.mickey.struts2demo.GettingStarted.MyFristAction,下面我們來(lái)看看這個(gè)類吧:
/**
*
*/
package org.mickey.struts2demo.GettingStarted;
import com.opensymphony.xwork2.ActionSupport;
/**
* @author mickey.shao
*
*/
public class MyFirstAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = -6911104681578292245L;
private String myName;
public String getMyName() {
return myName;
}
public void setMyName(String myName) {
this.myName = myName;
}
public String execute(){
return SUCCESS;
}
}
一般我們寫Action可以不繼承任何類,但是繼承ActionSupport是更好的選擇,這樣可以獲得框架更好的支持??吹絜xecute方法了吧?一般action的method需要滿足以下特點(diǎn):1.必須是public,2.必須返回String,3.必須不帶任何參數(shù)。SUCCESS其實(shí)是一個(gè)字符串"success",struts2已經(jīng)定義好了。action myFirstAction沒(méi)有指定method方法,默認(rèn)就執(zhí)行execute了,當(dāng)然我們完全可以不寫execute方法,因?yàn)楦割愐呀?jīng)有了默認(rèn)的實(shí)現(xiàn)。
寫完Action類,然后該寫頁(yè)面了,我這里用jsp,在src/main/webapp/WEB-INF下建立文件夾pages/getting_started,新建兩個(gè)jsp:first_action_input.jsp和first_action_result.jsp。先貼下這兩個(gè)文件的代碼哈:
first_action_input.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>輸入你的名字</title>
</head>
<body>
<s:form action="myFirstAction" namespace="/" method="post">
<s:textfield name="myName"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
</body>
</html>
first_action_result.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>看看結(jié)果?</title>
</head>
<body>
struts2跑通了嗎,<font color="red"><s:property value="myName"/></font>?呵呵!
</body>
</html>
first_action_input.jsp用于輸入任意的字符串,然后first_action_result.jsp顯示你輸入的字符串,很簡(jiǎn)單。在瀏覽器敲入
http://host:port/appName/gettingStarted.action,進(jìn)入到first_action_input.jsp,輸入“米老鼠”,點(diǎn)擊提交,看看結(jié)果吧~看到“struts2跑通了嗎,米老鼠?呵呵!”,恭喜你,你已經(jīng)入門了。
下面解釋下action和jsp的關(guān)系是如何映射的。往上看回我們的struts.xml文件,action gettingStarted的<result>標(biāo)簽配置的是first_action_input.jsp的相對(duì)于webapp根目錄的完整路徑,當(dāng)我們?yōu)g覽器敲入
http://host:port/appName/gettingStarted.action,struts根據(jù)配置,把視圖轉(zhuǎn)向了所配置的jsp去了。然后看看另一個(gè)action myFirstAction,<result>標(biāo)簽中多了個(gè)屬性name,這個(gè)其實(shí)就是Action類的方法返回的字符串了,<result>標(biāo)簽主要包括name和type屬性,name默認(rèn)是"success",所以看到gettingStarted的result沒(méi)有配置name,其實(shí)是默認(rèn)了。type默認(rèn)是dispatcher,普通分發(fā)而已,無(wú)需贅述。當(dāng)然type還有redirect,plain text,chain等很多,這些深入的請(qǐng)看后面的文章,呵呵!
現(xiàn)在的問(wèn)題是,如何使得action myFirstAction執(zhí)行呢?這就看看我們的first_action_input.jsp代碼吧,頁(yè)面中我使用了struts的tags,請(qǐng)從struts-core包META-INF目錄下將struts-tags.tld拷貝到WEB-INF目錄下,在頁(yè)面用taglib將其導(dǎo)入。頁(yè)面有主要由一個(gè)form組成,form里面有一個(gè)input文本框和一個(gè)提交按鈕,文本框和提交按鈕我都用的struts的tag,當(dāng)然也可以不用的,關(guān)于struts-tags的更多內(nèi)容可以參考后面的文章。
<s:form action="myFirstAction" namespace="/" method="post">
<s:textfield name="myName"></s:textfield>
<s:submit value="提交"></s:submit>
</s:form>
看到這段,是不是已經(jīng)豁然開(kāi)朗了?呵呵!看到myName了吧,這就是我們Action類中的域了!那么這個(gè)myName是如何設(shè)置到Action類中的呢?這就要?dú)w功于偉大的攔截器機(jī)制了,關(guān)于攔截器的更多內(nèi)容,請(qǐng)參看后面的文章,呵呵!
提交數(shù)據(jù)后,struts找到myFirstAction的配置,把結(jié)果導(dǎo)向到了first_action_result.jsp中,結(jié)果頁(yè)面通過(guò)<s:property />標(biāo)簽將myName打印到頁(yè)面上了。
看了這篇文章,應(yīng)該覺(jué)得struts2開(kāi)發(fā)很簡(jiǎn)單吧?
下一篇文章將深入介紹struts.xml,敬請(qǐng)關(guān)注。
posted on 2009-10-22 20:49
Mickey.Shao 閱讀(633)
評(píng)論(0) 編輯 收藏 所屬分類:
struts2