一、開發流程
1)引入 jar 包,其中必須引入的有(我是用的struts是2.3.32)
commons-fileupload-1.3.2.jar |文件上傳下載
commons-io-2.2.jar |
commons-lang3-3.2.jar |long擴充包
freemarker-2.3.22.jar |標簽擴充
javassist-3.11.0.GA.jar |
ognl-3.0.19.jar
struts2-core-2.3.32.jar |struts核心包
xwork-core-2.3.32.jar |xwork核心包
2)配置web.xml 文件,引入filter,這是固定格式
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
3)開發action
4)配置 struts.xml 配置文件,該配置文件需要放到 src 目錄下。
配置文件樣例如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="Adminpkg" namespace="/Admin" extends="struts-default"> <action name="login" class="com.huitong.action.AdminAction" method="login"> <result name="success" type="dispatcher">/index.jsp</result> </action> </package> </struts>
其中result name表示調用類 class 的方法 method 后返回的標記。
說明:package 是用來管理各個action的。
二、action類中對共享數據的處理方式有3中,
1)使用servlet api獲取相應的域對象
2)使用 ActionContext 對象獲取域對象
3)實現接口SessionAware,RequestAware, ApplicationAware
域對象的說明,有request, session, application
2.2.1)方式1的實現,主要的類是:ServletActionContext,實現代碼如下
HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); ServletContext servletContext = ServletActionContext.getServletContext(); request.setAttribute("request", "requestValServletActionContext"); session.setAttribute("session", "sessionValServletActionContext"); servletContext.setAttribute("application", "servletContextValServletActionContext"); return SUCCESS;
說明:在struts 框架中導入servlet 類,有點高耦合,以后盡量少用。除非到必須要用,例如獲取項目地址 request.getContextPath()。
2.2.2)方式2的實現,主要的類是ActionContext,實現代碼如下
ActionContext acContext = ActionContext.getContext(); //首先獲取ActionContext 對象 Map<String, Object> request = acContext.getContextMap(); Map<String, Object> session = acContext.getSession(); Map<String, Object> application = acContext.getApplication(); request.put("request", "requestValActionContext"); session.put("session", "sessionValActionContext"); application.put("application", "applicationValActionContext"); return SUCCESS;
說明:這種方法首先獲取actionContext對象。使用的是map來存儲數據。這種方式一般用在方法種類比較少的情況,因為每個處理方法都需要獲取對象,進而處理。
要想獲取其他域對象,首先獲取 actionContext 上下文環境對象。
ActionContext accontext = ActionContext.getContext();
1)獲取request 對象
Map<String, Object> request = accontext.getContextMap();
2)獲取 session 對象
Map<String, Object> session = accontext.getSession();
3)獲取 servletContext 對象
Map<String, Object> application = accontext.getApplication();
2.2.3)方式3 的實現,主要的接口有 SessionAware,RequestAware, ApplicationAware;實現方法如下
public class datapro3 extends ActionSupport implements SessionAware, RequestAware, ApplicationAware { private Map<String, Object> application=null; private Map<String, Object> request=null; private Map<String, Object> session=null; @Override public void setApplication(Map<String, Object> application) { this.application = application; } @Override public void setRequest(Map<String, Object> request) { this.request = request; } @Override public void setSession(Map<String, Object> session) { this.session = session; } public String pro3(){ request.put("request", "requestValRequestAware"); session.put("session", "sessionValSessionAware"); application.put("application", "applicationValApplicationAware"); return SUCCESS; } }
該方法跟實現方式2差不多,只不過這種方法將域對象首先存儲到類的屬性中,在以后的處理方法上直接使用即可。所以這種方法可以應用於處理的方法比較多的情況。