SSH-struts1登錄實例

本篇博客以登錄實例,來看struts架構的實現思路。

1.登錄的jsp頁面

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
	<form action="login.do" method="post">
		姓名:<input type="text" name="username"><br>
		密碼:<input type="password" name="password"><br>
		<input type="submit" value="登錄">
	</form>
</body>
</html>

說明:form表單中,根據action的值,在struts-config.xml文件中會找到<path="/action">的<action-mapping>標籤。根據這個標籤,找得到對應的action類。這裏是LoginAction類


2.loginActionForm類,負責收集實體信息

package com.bjpowernode.struts;

import org.apache.struts.action.ActionForm;

/**
 * 登錄ActionForm,負責收集表單數據
 * 表單的屬性必須和LoginActionForm中get、set的屬性一致
 * @author xj
 *
 */
@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;
	}	
}

說明:

這個類繼承自struts架構中的ActionForm類。需要注意,類中的set方法名稱中的變量名,小寫首字母需要和JSP頁面裏提交的form表單中標籤的名一致。例如:getPassword中的password對應,form表單中name屬性爲password的標籤

 

3.Action類,取得表單信息,調用業務邏輯,返回轉向信息

package com.bjpowernode.struts;

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;

/**
 * 登錄Action
 * 負責取得表單數據,調用業務邏輯,返回轉向信息
 * @author xj
 *
 */
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();
		if("admin".equals(username)&&"admin".equals(password)){
			return mapping.findForward("success");
		}else{
			return mapping.findForward("error");
		}*/
		
		LoginActionForm laf = (LoginActionForm)form;
		String username = laf.getUsername();
		String password = laf.getPassword();
		
		UserManager userManager = new UserManager();
		try{
			//調用相應的業務邏輯處理類
			userManager.login(username, password);
			
			//跳轉到登錄成功頁面
			return mapping.findForward("success");
			
			//用自己封裝的異常類捕獲異常——用戶不能找到
		}catch(UserNotFoundException e){
			e.printStackTrace();
			//將錯誤信息存放到request中
			request.setAttribute("msg", "用戶不能找到,用戶名稱=【" + username +"】");
			
			//用自己封裝的異常類捕獲異常——密碼錯誤
		}catch(PasswordErrorException e){
			//將錯誤信息放到request中
			request.setAttribute("msg", "密碼錯誤!");
		}
		
		//跳轉到錯誤頁面
		return mapping.findForward("error");
	}

}

說明:這個類繼承Struts框架中的Action類,實現了execute方法.參數form存放了提交表單的信息。request存放了用戶的請求信息。在Action中對用戶請求進行業務處理,調用Model訪問數據庫,將操作數據庫的結果信息放到request中。最後返回要跳轉到的JSP頁面。將頁面展示給用戶。

 

4.配置文件

<?xml version="1.0" encoding="iso-8859-1"?>
<!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>
	<form-beans>
		<form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"></form-bean>
	</form-beans>
	<action-mappings>
		<action path="/login"
				type="com.bjpowernode.struts.LoginAction"
				name="loginForm"
				scope="request"
				>
			<forward name="success" path="/login_success.jsp"></forward>
			<forward name="error" path="/login_error.jsp"></forward>
		</action>
	</action-mappings>
  
</struts-config>

說明:

在配置文件中,標籤<form-beans>包含所有的Form類。這裏是LoginActionForm類。

<action-mappings>中配置了。用戶請求地址和Action類對應關係,以及Action類和ActionForm類的對應關係。


分析業務流轉:用戶輸入用戶名,密碼提交表單。通過分析請求地址找到對應的action。此例中爲loginAction。並將提交的表單信息,放到與loginAction匹配的LoginActionForm中。在Action中執行execute方法,進行業務處理。

 

5.實現效果

登錄頁面輸入用戶名和密碼,登錄成功則跳轉到登錄成功頁面,否則跳轉到登錄失敗頁面。登錄失敗時通過異常類捕獲了異常,提示相應的錯誤。

6.總結:

通過這個實例很清楚的瞭解了strust1的執行流程。

發佈了106 篇原創文章 · 獲贊 78 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章