SSH-struts1登录实例

来源:互联网 发布:淘宝没有人工客服了吗 编辑:程序博客网 时间:2024/05/18 03:08

本篇博客以登录实例,来看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 {@Overridepublic 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的执行流程。

0 0