Java架構(二)——Structs

來源:互聯網
上載者:User

       Structs是Java三大架構之一,Struts是採用JavaServlet/JavaServer Pages技術,開發Web應用程式的開放源碼的Framework。採用Structs開發是基於MVC的應用程式框架。


       首先簡單再說一下MVC(Model/View/Controller):

      M是指資料模型,在Structs中通常由ActionForm Bean表示,

      V是指使用者介面,視圖通常是由JSP建立的,Structs包含擴充自訂標籤庫(TagLib),可以簡化使用者介面的建立過程。目前的標籤庫包括:Bean Tags 、 HTML tags 、 Logic Tags 、 Nested Tags 以及 Template Tags 等。

      C則是控制器,在Structs中實現控制邏輯的是Action,在struts-config.xml設定檔中ActionMapping 與 ActionForward 則指定了不同商務邏輯或流程的運行方向。

      使用MVC的目的是將M和V的實現代碼分離,從而使同一個程式可以使用不同的表現形式,C存在的目的則是確保M和V的同步,一旦M改變,V應該同步更新。


       Structs只能用於Web程式開發,那麼它的工作流程是怎麼走的呢?在Struts中,使用者的請求一般以*.do作為請求服務名,所有的*.do請求均被指向ActionSevlet,ActionSevlet根據Struts-config.xml中的配置資訊,將使用者請求封裝成一個指定名稱的FormBean,並將此FormBean傳至指定名稱的ActionBean,由ActionBean完成相應的業務操作,如檔案操作,資料庫操作等。每一個*.do均有對應的FormBean名稱和ActionBean名稱,這些在Struts-config.xml中配置。所以說Struts的核心是ActionSevlet,ActionSevlet的核心是Struts-config.xml。

      

      下面做一個登陸頁面的小Demo和大家分享:

首先是JSP頁面的代碼(其中使用了taglib):

<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%><%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html:html lang="true"><head><html:base /><title>登陸頁面</title></head><body><center><font color="red"><html:errors property="loginerror" /></font><br><form action="login.do" method="post"  focus="login"><table border="0"><tr><td>使用者名稱:</td><td><input name="username" type="text" /></td><td><font color="red"><html:errors property="username"/></font></td></tr><tr><td>密碼:</td><td><input name="password" type="password" /></td><td><font color="red"><html:errors property="password"/></font></td></tr><tr><td colspan="2" align="center"><input type="submit" value="提交"/></td></tr></table></form></center></body></html:html>

接著是ActionServlet代碼:

package com.sinosoft.servlet.action;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.action.ActionMessage;import org.apache.struts.action.ActionMessages;import com.sinosoft.servlet.form.LoginForm;public class LoginAction extends Action {public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {LoginForm loginForm=(LoginForm)form;if(loginForm.getUsername().equals("xdp") && loginForm.getPassword().equals("123")){//登陸成功,將使用者資訊設定到session中request.getSession().setAttribute("user", loginForm.getUsername());//跳轉到指定的頁面return mapping.findForward("success");}else{//登陸失敗,處理ActionMessages errors=new ActionMessages();errors.add("loginerror",new ActionMessage("login.error"));this.addErrors(request, errors);//擷取設定檔中action的input屬性,並跳轉到這個頁面return mapping.getInputForward();}}}

下面是ActionForm的代碼:

package com.sinosoft.servlet.form;import javax.servlet.http.HttpServletRequest;import org.apache.struts.action.ActionErrors;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionMapping;import org.apache.struts.action.ActionMessage;public class LoginForm extends ActionForm {private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}/** * 驗證函式 */public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {ActionErrors errors=new ActionErrors();//判斷使用者名稱,加入錯誤資訊if(this.username==null || this.username.trim().equals("")){errors.add("username", new ActionMessage("username.null"));}//判斷密碼,加入錯誤資訊if(this.password==null || this.password.trim().equals("")){errors.add("password", new ActionMessage("password.null"));}return errors;}}

我們還添加了一個設定檔ApplicationResources.properties,用來存放錯誤提示資訊:

最後一個是struts-config.xml配置資訊:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config><data-sources />  <form-beans>  <form-bean name="loginForm" type="com.sinosoft.servlet.form.LoginForm"/>  </form-beans>   <global-exceptions />  <global-forwards />  <action-mappings>  <action path="/login" attribute="loginForm"   input="/login.jsp" name="loginForm" scope="request"  type="com.sinosoft.servlet.action.LoginAction">  <forward name="success" path="success.jsp"></forward>  </action>  </action-mappings>  <message-resources parameter="com.yourcompany.struts.ApplicationResources"></message-resources></struts-config>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.