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的执行流程。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值