http://www.cnblogs.com/taxuewuhen/archive/2012/07/12/2588928.html
按struts2小例子配置開發環境。配置好后目錄如下:
Struts2.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> <constant name="struts.enable.DynamicMethodInvocation" value="true" /><!-- 動態方法調用應設為true --> <constant name="struts.devMode" value="true" /> <!-- namespace相當於路徑,訪問方式如下:/teacher/a/b/c/d/hello.action, 先找 /teacher/a/b/c/d這個namespace,若存在,則找hello.action,若action找到,則進行處理,若action找不到,會報錯, 若namespace不存在,則找下級namespace即/teacher/a/b/c再次執行上述查找。直到/這個根namespace,若還找不到action, 則會報錯。 --> <package name="default" namespace="/" extends="struts-default"> <!-- 這些配置要注意符合struts2配置的先后順序 --> <default-action-ref name="hello"/> <!-- 配置默認action,即在該包下若找不到要訪問的action,則就交給默認action處理 --> <global-results> <!--配置global-result 這些result該包下所有action都可以使用--> <result name="error">/index.jsp</result> </global-results> <global-exception-mappings> <!-- 配置Exception-mapping來處理異常 ,交給相應的頁面處理--> <exception-mapping result="error" exception="java.lang.Exception"/> </global-exception-mappings> <action name="hello"><!-- 若action的class和method沒有配,默認調用ActionSupport.execute(),返回"success"--> <result>/index.jsp</result> <!-- 默認result的name="success",type="dispatcher" --> <result name="error">/index.jsp</result> <exception-mapping result="error" exception="java.lang.Exception"/> <!-- 在action配置該action的異常處理 --> </action> </package> <package name="teacher" namespace="/teacher" extends="struts-default"> <action name="teacherAdd" class="cn.com.soft.action.TeacherAction" method="add"> <param name="name">zhangsan</param> <!-- 向action中傳遞靜態參數 --> <param name="age">23</param> <result name="add_success">/teacher_add_success.jsp</result> </action> <!-- 可以使用/teacher!add.action來動態方法調用 method也可以配置--> <action name="teacher" class="cn.com.soft.action.TeacherAction"> <result name="add_success">/teacher_add_success.jsp</result> <!-- result type 有好多種, 可以在struts-default.xml查看, 默認dispatcher服務器端跳轉,redirect客戶端跳轉 這兩個只能跳轉到頁面 chain服務器端跳轉,redirectAction客戶端跳轉 這兩個跳轉到action --> <result name="delete_success">/teacher_delete_success.jsp</result> <result name="redirect" type="redirect">/teacher_delete_success.jsp</result> <result name="chain" type="chain">teacherAdd</result> <result name="redirectAction" type="redirectAction"> <param name="actionName">hello</param> <!-- 若action不在同一個package中,配這兩個參數 --> <param name="namespace">/</param> </result> </action> </package> <!-- 使用通配符來進行action方法調用 --> <package name="user" namespace="/user" extends="struts-default"> <action name="*_*" class="cn.com.soft.action.{1}Action" method="{2}"> <result name="{2}_success">/${path}.jsp?path=${path}</result> <!-- ${path}是從valueStack中取數據,動態跳轉 和傳遞參數--> </action> </package> </struts>
Teacher.java如下:
package cn.com.soft.model;
public class Teacher {
private String name ;
private int age ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
TeacherAction.java如下:
package cn.com.soft.action; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.ApplicationAware; import org.apache.struts2.interceptor.RequestAware; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.SessionAware; import org.apache.struts2.util.ServletContextAware; import cn.com.soft.model.Teacher; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class TeacherAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware , ServletRequestAware ,ServletContextAware { /** * 使用屬性和Model來接受參數 */ private String name ; private int age ; private Teacher teacher ; private int type ; /** * 實現接口來獲取request、session、application */ private Map<String, Object> request3 ; private Map<String, Object> session3 ; private Map<String, Object> application3 ; private HttpServletRequest request4 ; private HttpSession session4 ; private ServletContext application4 ; /** * @method:add() * @return : add_success */ public String add(){ System.out.println("name :" + name ); System.out.println("age : " + age); //獲取request、session、context的常用兩種方式,我們也可以使用implements接口: @SuppressWarnings("unchecked") Map<String, Object> request = (Map<String, Object>) ActionContext.getContext().get("request") ; Map<String, Object> session = ActionContext.getContext().getSession() ; Map<String, Object> application = ActionContext.getContext().getApplication() ; request.put("request", "requestAttribute") ; session.put("session", "sessionAttribute") ; application.put("application", "applicationAttribute") ; HttpServletRequest request2 = ServletActionContext.getRequest() ; HttpSession session2 = request2.getSession() ; ServletContext application2 = ServletActionContext.getServletContext() ; request2.setAttribute("request2","requestAttribute2") ; session2.setAttribute("session2", "sessionAttribute2") ; application2.setAttribute("application2", "applicationAttribute2") ; return "add_success" ; } /** * @method:delete() * @return : delete_success */ public String delete(){ if(type == 1 ){ return "redirect" ; }else if (type == 2) { return "chain" ; }else if (type == 3) { return "redirectAction" ; } return "delete_success" ; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Teacher getTeacher() { return teacher; } public void setTeacher(Teacher teacher) { this.teacher = teacher; } //另一種實現接口來獲得request、session、application public void setApplication(Map<String, Object> application) { application3 = application ; } public void setSession(Map<String, Object> session) { session3 = session ; } public void setRequest(Map<String, Object> request) { request3 = request ; } //第四種獲得request、session、application public void setServletContext(ServletContext context) { application4 = context ; } public void setServletRequest(HttpServletRequest request) { request4 = request ; session4 = request.getSession() ; } public int getType() { return type; } public void setType(int type) { this.type = type; } }
UserActioin.java如下:
package cn.com.soft.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private String path ;
public String add(){
path = "user_add_success" ;
return "add_success" ;
}
public String delete(){
path = "user_delete_success" ;
return "delete_success" ;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
}
攔截器后面再寫。
在Eclipse中配置struts-core.jar和x-work.jar的源文件,方式如下:
在引入的struts-core.jar和x-work.jar兩個jar包上分別點擊右鍵,打開properties對話框,在對話框中選中Java Source Attachment選項,在右邊點擊External Folder打開文件查找窗口。
struts-core.jar找:E:/文檔/struts-2.3.1.2-all/struts-2.3.1.2/src/core/src/main/java 這個文件夾 確定 OK
x-work.jar找:E:/文檔/struts-2.3.1.2-all/struts-2.3.1.2/src/xwork-core/src/main/java這個文件夾 確定 OK
E:/文檔/這個目錄根據自己情況確定下載的struts-2.3.1.2-all的位置
本文轉自:http://913046394-qq-com.iteye.com/blog/1456584
剛剛把玩了Struts2,是第一次接觸Struts2,就不做過多的解釋了。下面介紹在Eclipse中配置Struts2的過程:
一、下載Struts2,因為Struts2是開源的,百度或者google一下就可以找到下載地址。我下載的是struts-2.3.1.2版本 的,解壓之后入下圖:
apps目錄:Struts2的范例
docs目錄:Struts2的文檔
lib目錄:Struts2的類庫
src目錄:關於Struts2的一些資源
二、現在是利用apps中的范例實現一個helloworld的action,在apps目錄下有幾個war文件,如下圖:
這幾個文件可以用WinRAR打開,我用好壓打開struts2-blank.war之后,如下圖
在WEB-INF目錄下打開classes目錄,找到struts.xml文件,如下圖
將struts.xml文件復制到Eclipse新建工程的src目錄下,在我的工程中如下圖:
三、如上面所示,在WEB-INF目錄下打開lib目錄,如下圖:
打開之后會有如上圖的jar包,為保險起見,將所有的jar包復制到新建工程的lib目錄下,在我的工程中如下圖:
四、返回到WEB-INF目錄下,找到web.xml文件並打開,打開之后會看到有如下代碼:
將其中<filter></filter>和<filter-mapping></filter-mapping>元素復制到Eclipse新建工程的web.xml文件中,我的web.xml文件如下所示:
五、在Eclipse中打開復制來的struts.xml文件,將文件中<struts>和</struts>之間的內容注釋掉,並添加如下所示的代碼:
<package name="default" namespace="/" extends="struts-default"> <action name="hello"> <result> /Hello.jsp </result> </action> </package>
六、在Ecplise中新建一個Hello.jsp文件,在<body>標簽之間寫如下代碼:
然后啟動Tomcat服務器,在IE瀏覽器中輸入http://localhost:8080/Structs0317會發現出現如下錯誤:
其實正確的輸入是http://localhost:8080/Structs0317/hello或者http://localhost:8080/Structs0317/hello.action 訪問到的Hello.jsp如下圖所示:
OK,至此所有的配置都配置好了,接下來就可以好好的去玩Struts2了。在這里還想再談一點感受就是,遇到新的東西首先是先拿去用,等會用了在好好研究它的原理和細枝末節,就像別人給你一把槍一樣,你不會一拿到槍就把它拆開來研究它的內部構造,而是直接拿去用,會用了,覺得這東西有意思了,再好好去研究的內部結構甚至是仿制出一把出來。這也是我以前所沒有意識到的,希望今后改進,好好學習,天天向上。