Struts2 入门实例代码
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> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <constant name="struts.devMode" value="true" /> <include file="helloworld.xml"/></struts>
<?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><include file="struts-default.xml"/> <package name="helloworld" namespace="/" extends="struts-default"> <interceptors> <interceptor name ="authentication" class ="com.jamesby.struts2.LogonInterceptor"/> <interceptor-stack name="helloWorldStack"> <interceptor-ref name="authentication"/> <interceptor-ref name="paramsPrepareParamsStack"/> </interceptor-stack> </interceptors> <default-interceptor-ref name="helloWorldStack"/><global-results><result name="login">/WEB-INF/jsp/Logon.jsp</result> </global-results><action name="Logon_*" method="{1}" method="{1}" type="redirect-action">crud!list</result><result name="input">/WEB-INF/jsp/userForm.jsp</result></action><action name="*" name="code">package com.jamesby.struts2;import java.util.Map;import com.jamesby.struts2.persist.User;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class LogonInterceptor extends AbstractInterceptor{@Overridepublic String intercept(ActionInvocation ai) throws Exception {Map session = ai.getInvocationContext().getSession();User user = (User) session.get("user");if (null != user) {return ai.invoke();} else {return Action.LOGIN;}}}
package com.jamesby.struts2;import java.util.Map;import org.apache.struts2.interceptor.SessionAware;import org.apache.struts2.interceptor.validation.SkipValidation;import com.jamesby.struts2.persist.DataBaseMock;import com.jamesby.struts2.persist.User;import com.opensymphony.xwork2.ActionSupport;public class Logon extends ActionSupport implements SessionAware {private Map session;public void setSession(Map session) {this.session = session;}@SkipValidationpublic String doInput() throws Exception {return INPUT;}public String doLogon() throws Exception {User user = DataBaseMock.selectUserByUsernameAndPassword(getUsername(),getPassword());if (null == user)return INPUT;session.put("user", user);return SUCCESS;}private String username;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}private String password;public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
package com.jamesby.struts2;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import org.apache.struts2.interceptor.validation.SkipValidation;import com.jamesby.struts2.persist.DataBaseMock;import com.jamesby.struts2.persist.User;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private User user=new User();private List<User> userList;public List<HashMap> getSexArray() {List<HashMap> sexArray = new ArrayList<HashMap>();HashMap male = new HashMap();male.put("key",new Integer(1));male.put("value","男");HashMap female = new HashMap();female.put("key",new Integer(2));female.put("value","女");sexArray.add(male);sexArray.add(female);return sexArray;}public List<HashMap> getFromArray() {List<HashMap> fromArray = new ArrayList<HashMap>();HashMap bj = new HashMap();bj.put("id",new Integer(1));bj.put("name","北京");HashMap sh = new HashMap();sh.put("id",new Integer(2));sh.put("name","上海");HashMap tj = new HashMap();tj.put("id",new Integer(3));tj.put("name","天津");fromArray.add(bj);fromArray.add(sh);fromArray.add(tj);return fromArray;}@SkipValidationpublic String doList() throws Exception {userList = DataBaseMock.selectAllUser();return "list";}@SkipValidationpublic String doInput() {return INPUT;}public String doSave() {if (null == user.getUserid()) {user.setUserid(new Integer(DataBaseMock.getNewUserId()));DataBaseMock.saveUser(user);}else{DataBaseMock.updateUser(user);}return SUCCESS;}@SkipValidationpublic String doRead(){user = DataBaseMock.getUser(user.getUserid());return INPUT;}@SkipValidationpublic String doDelete() {DataBaseMock.deleteUser(user);return SUCCESS;}public List<User> getUserList() {return userList;}public void setUserList(List<User> userList) {this.userList = userList;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}}
package com.jamesby.struts2;import com.opensymphony.xwork2.ActionSupport;public class ExampleSupport extends ActionSupport {}
package com.jamesby.struts2.persist;public class User {private Integer userid;private String username;private String password;private int sex;private int age;private int from;public int getFrom() {return from;}public void setFrom(int from) {this.from = from;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public int getSex() {return sex;}public void setSex(int sex) {this.sex = sex;}public Integer getUserid() {return userid;}public void setUserid(Integer userid) {this.userid = userid;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}
package com.jamesby.struts2.persist;import java.util.ArrayList;import java.util.List;public class DataBaseMock {private static List<User> _cache = new ArrayList<User>();private static int userid = 0;static {User user = new User();user.setUserid(new Integer(0));user.setUsername("admin");user.setPassword("12345688");user.setFrom(1);// 北京user.setSex(1);// 男user.setAge(18);_cache.add(user);}public static User selectUserByUsernameAndPassword(String username,String password){for (User u : _cache) {if (u.getUsername().equals(username)&&u.getPassword().equals(password)) {return u;}}return null;}public static List<User> selectAllUser(){return _cache;}public static int getNewUserId() {return ++userid;}public static void saveUser(User user) {_cache.add(user);}public static void updateUser(User user) {deleteUser(user);saveUser(user);}public static void deleteUser(User user) {for (User u : _cache) {if (u.getUserid().intValue() == user.getUserid().intValue()) {_cache.remove(u);break;}}}public static User getUser(Integer userid) {return _cache.get(userid);}}
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"><validators> <field name="username"> <field-validator type="requiredstring"><message key="requiredstring"/> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"><message key="requiredstring"/> </field-validator> </field></validators>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"><validators> <field name="user.username"> <field-validator type="requiredstring"> <message key="errors.required.username"/> </field-validator> </field> <field name="user.password"> <field-validator type="requiredstring"> <message key="errors.required.password"/> </field-validator> </field> <field name="user.sex"> <field-validator type="required"> <message key="errors.required.sex"/> </field-validator> </field> <field name="user.age"> <field-validator type="required" short-circuit="true"> <message key="errors.required.age"/> </field-validator> <field-validator type="int"> <param name="min">18</param> <param name="max">65</param> <message key="errors.required.age.limit"/> </field-validator> </field> <field name="user.from"> <field-validator type="required"> <message key="errors.required.from"/> </field-validator> </field> </validators>
requiredstring = $\{getText(fieldName)} is required.password = Passwordusername = User Namemain.message = This is main page...................label.userList= All User Listuser.username=Usernameuser.password=Passworduser.sex=Sexuser.age=Ageuser.from=Fromerrors.required.username=Username is requirederrors.required.password=Password is requirederrors.required.sex=Sex is Requirederrors.required.from=From is Requirederrors.required.age.limit=Age between 18 and 65errors.required.age.limit=Age between 18 and 65
<%@ taglib prefix="s" uri="/struts-tags" %><html><head> <title>Logon</title></head><body><s:form action="Logon!logon"> <s:textfield label="%{getText('username')}" name="username"/> <s:password label="%{getText('password')}" name="password" /> <s:submit/></s:form></body></html>
<%@ page contentType="text/html;charset=GBK"%><%@taglib prefix="s" uri="/struts-tags" %><head> <title><s:text name="label.userList"/></title></head><s:url id="url" action="crud!input" /><a href="<s:property value="#url"/>">Add New User</a><br><table border="1"><tr status="status"><tr /></td><td><s:property value="username" /></td><td><s:if test="sex==1">男</s:if><s:else>女</s:else></td><td><s:property value="age" /></td><td><s:if test="from==1">北京</s:if><s:if test="from==2">上海</s:if><s:if test="from==3">天津</s:if></td><td><a href="crud!read.action?user.userid=<s:property value="userid" />">修改</a></td><td><a href="crud!delete.action?user.userid=<s:property value="userid" />">删除</a></td></tr></s:iterator></table>
<%@ page contentType="text/html;charset=GBK"%><%@taglib prefix="s" uri="/struts-tags" %>User Form<s:form action="crud!save.action" method="post"> <s:textfield required="true" name="user.username" value="%{user.username}" label="%{getText('user.username')}" size="40"/> <s:textfield required="true" name="user.password" value="%{user.password}" label="%{getText('user.password')}" size="40"/> <s:radio required="true" name="user.sex" listKey="key" listValue="value" value="%{user.sex}" label="%{getText('user.sex')}" list="sexArray"/> <s:textfield required="true" name="user.age" value="%{user.age}" label="%{getText('user.age')}" size="40"/> <s:select label="%{getText('user.from')}" name="user.from" headerKey="" headerValue="Select From" list="fromArray" listKey="id" listValue="name" value="user.from" required="true"/> <s:hidden name="user.userid" value="%{user.userid}"/> <s:submit value="Submit"/> <s:submit value="Cancel" name="redirect-action:crud!list"/></s:form>
WEB-INF│ web.xml│├─classes│ │ commons-logging.properties│ │ helloworld.xml│ │ log4j.properties│ │ struts.properties│ │ struts.xml│ ││ └─com│ └─jamesby│ └─struts2│ │ ExampleSupport.class│ │ Logon-validation.xml│ │ Logon.class│ │ LogonInterceptor.class│ │ package.properties│ │ UserAction-validation.xml│ │ UserAction.class│ ││ └─persist│ DataBaseMock.class│ User.class│├─jsp│ Logon.jsp│ Main.jsp│ userForm.jsp│ userList.jsp│├─lib commons-collections-3.1.jar commons-logging-1.0.4.jar freemarker-2.3.8.jar log4j-1.2.9.jar ognl-2.6.11.jar struts2-core-2.0.6.jar xwork-2.0.1.jar