程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 層層遞進Struts1(二)之Struts1簡介及登錄實例

層層遞進Struts1(二)之Struts1簡介及登錄實例

編輯:關於JAVA

上篇博客由Servlet的幾個版本的例子,引出在頁面跳轉控制方面要解決的問題,在文章最後提到了 Struts1,這篇文章目的是解釋一下什麼是Struts1,及如何使用的問題。

什麼是Struts1

說一 下我的理解:它符合MVC思想,使用Java二次開發封裝的一個框架,主要簡化、解決頁面請求分發、跳轉的問 題。Stuts1的優點是使用了豐富的配置文件使得靈活性大大提高;因為已經封裝成框架,使得縮短了開發時間 、提高了開發效率,同時適量使用抽象,使得代碼冗余減低、文件冗余減少,維護更加簡單。

Struts1 各個部件的相互作用如下:

它是一個開源項目,我們可以深入到框架的源碼中,進一步理解Struts1並學習其開發、封裝的思想,非常 利於編程能力的提升。

登錄實例

首先來看一下一個完整的struts1的登錄實例,通過這個實例 中涉及到的Struts1組成,來解釋這些組成,並說明Struts1執行的流程。

文件樹

login.jsp

簡單的登錄驗證界面,僅驗證用戶名和密碼。

<form action="login.do" method="post">  
    用戶:<input type="text" name="username" /><br/>  
    密碼:<input type="text" name="password" /><br/>  
    <input type="submit" value="提交"/>  
</form>

LoginActionForm

封裝使用到的用戶名和密碼信息,和三層中的實體作用了類 似,這個在以後的文章中會詳細說明。

package com.tgb.struts1;  
      
import org.apache.struts.action.ActionForm;  
/***** 
 * 收集表單數據 
 * 表單屬性值必須和get/set相對應 
 * @author Administrator 
 * 
 */
@SuppressWarnings("serial")  
public class LoginActionForm 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;  
        }  
}

LoginAction

用於跳轉請求的邏輯處理和跳轉指向,此處一直跳轉到success標簽中,從下 面的配置文件中,可以看到success代表的是login_success.jsp。

package com.tgb.struts1;  
      
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import javax.swing.ActionMap;  
      
import org.apache.struts.action.Action;  
import org.apache.struts.action.ActionForm;  
import org.apache.struts.action.ActionForward;  
import org.apache.struts.action.ActionMapping;  
      
/**** 
 * 調用業務邏輯,返回轉向信息 
 * @author Administrator 
 * 
 */
public class LoginAction extends Action {  
        @Override
        public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest 

request,HttpServletResponse response) throws Exception  
        {  
            LoginActionForm laf=(LoginActionForm)form;  
            String username=laf.getUsername();  
            String password=laf.getPassword();  
            UserManager userManager=new UserManager();  
            try {  
                userManager.login(username, password);  
            } catch (UserNotFoundException e) {  
                e.printStackTrace();  
                request.setAttribute("msg", "用戶名未找到"+username);  
            } catch(PasswordWrongException e)  
            {  
                e.printStackTrace();  
                request.setAttribute("msg", "密碼錯誤");  
            }  
            return mapping.findForward("success");  
        }  
              
}

UserManager

模擬model和controller的功能。

package com.tgb.struts1;  
      
/***** 
 * 邏輯處理,此處以簡答的admin驗證為例 
 * @author lidab_000 
 * 
 */
public class UserManager {  
      
        public void login(String username,String password)  
        {  
            if (!"admin".equals(username)) {  
                throw new UserNotFoundException();  
            }  
            if (!"admin".equals(password)) {  
                throw new PasswordWrongException();  
            }  
        }  
}

配置文件

web.xml

這個是Tomcat讀取的配置文件,在這裡需要指定進入struts的請 求類型和處理此請求的類。

<servlet>  
  <servlet-name>action</servlet-name>  
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>  
  <init-param>  
    <param-name>config</param-name>  
    <param-value>/WEB-INF/struts-config.xml</param-value>  
  </init-param>  
  <init-param>  
    <param-name>debug</param-name>  
    <param-value>2</param-value>  
  </init-param>  
  <init-param>  
    <param-name>detail</param-name>  
    <param-value>2</param-value>  
  </init-param>  
  <load-on-startup>2</load-on-startup>  
</servlet>  
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>  
  <servlet-name>action</servlet-name>  
  <url-pattern>*.do</url-pattern>  
</servlet-mapping>

struts-config.xml

這個是struts讀取的配置文件,在此配置文 件中,需要設置通過截取url指定的處理類、轉向信息、表單封裝的類及其它信息,例如作用域等。

<!DOCTYPE struts-config PUBLIC  
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"  
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">  
      
<struts-config>  
    <form-beans>  
        <form-bean name="loginForm"  type="com.tgb.struts1.LoginActionForm" />  
    </form-beans>  
          
    <action-mappings>  
        <action path="/login" type="com.tgb.struts1.LoginAction"  name="loginForm"  

scope="request">  
            <forward name="success"  path="/login_success.jsp"/>  
            <forward name="error"  path="/login_error.jsp" />  
        </action>  
    </action-mappings>  
</struts-config>

運行結果

如果輸入的都是admin,則顯示登錄成功:

流程分 析

使用時序圖分析流程如下:

我來解釋一下這個流程:

用戶輸入用戶名、密碼後提交請求

Tomcat得到請求,根據讀取的web.xml,判斷是否為struts指定的類型(*.do)

如果是struts指定類型,則將請求轉到指定的類文件(ActionServlet.java)

ActionServlet截取請求的url,匹配struts-config文件中的form和action類(LoginActionForm.java和 LoginAction.java)

將提交的表單數據放入form中(LoginActionForm)

執行指定的Action(LoginAction),獲取跳轉信息(login_success.jsp)

ActionServlet執行跳轉

渲染頁面,展現給用戶

這僅僅是從宏觀上struts的執行流程,這僅僅是外在的表現,其內在如何執行?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved