struts旅程(二)Struts登录示例


上一篇我们简单了解了struts原理,学习SSH,第一部是傻瓜式学习法,人家怎么做就跟着怎么做就ok。我们以登录为例,Struts配置步骤总结如下(如图2.1):

struts旅程(二)Struts登录示例_第1张图片

2.2

 

1、          jar包拷贝

首先是建立java web项目,之后打开我们我们下载好strtus框架,Struts-1.2.9-bin文件夹和struts-1.2.9.src源文件文件夹。在bin文件夹中的lib文件中拷贝strutsjar包,拷贝到我们自己项目struts_login –>lib文件夹下(如图2.2)。

struts旅程(二)Struts登录示例_第2张图片

2.2

2、          web.xml文件配置

找到Struts-1.2.9-binStruts-1.2.9-bin-->webapps下的struts实例struts-blank中的struts-1.2.9-bin\webapps\struts-blank\WEB-INF下的web.xml文件,复制配置对ActionServlet的配置,粘贴到我们的项目struts_loginWEB-INF下的web.xml中,代码如下所示。主要是对struts自带的ActionServlet进行配置。


   action
   org.apache.struts.action.ActionServlet
   
     config
     /WEB-INF/struts-config.xml
   
   
     debug
     2
   
   
     detail
     2
   
   2
 
 
 
 
 
   action
   *.do
 


3、          在项目中建立自己的ActionForm

在项目中建立自己的ActionForm,继承struts框架中已经写好的ActionForm,在ActionForm设置用到的数据,并且要和我们界面上设置的名称一致。因为我们在提交表单的时候,所有的请求都会放到ActionForm中。建立登录的ActionFormLoginActionForm.java代码如下所示。

package com.bjpowernode.struts;
import org.apache.struts.action.ActionForm;
 
/**
 * 登录ActionForm,负责表单收集数据.
 * 表单的属性必须和ActionForm中的get和set的属性一致.
 * @author summer
 *
 */
public classLoginActionForm extends ActionForm {
 
    //用户名。
    private Stringusername;
    //密码。
    private String password;
   
    //设置密码。
    public voidsetPassword(Stringpassword) {
       this.password = password;
    }
    //得到用户名。
    public StringgetUsername() {
       return username;
    }
    //设置用户名。
    public voidsetUsername(Stringusername) {
       this.username = username;
    }
    //得到密码。
    public StringgetPassword() {
   
       return password;
    }
   
}


4、          建立自己的Action

建立自己的Action,同时继承struts框架中的org.apache.struts.action.Action重载父类的execute方法。在这里完成取出表单中的数据。通过CalActionFormcalForm= (CalActionForm)(CalActionForm)form;struts框架中已经帮我们封装好了,我们去使用就可以了)来取得表单中的值。经过判断后,进行相应的操作,跳转到相应的页面。Action的功能是负责拿到表单数据和调用业务逻辑后进行页面跳转。建立登陆的Action类,LoginAction.java类,调用业务逻辑类UserManagerlogin方法。代码如下所示。

packagecom.bjpowernode.struts;
 
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
 
importorg.apache.struts.action.Action;
importorg.apache.struts.action.ActionForm;
importorg.apache.struts.action.ActionForward;
importorg.apache.struts.action.ActionMapping;
 
/**
 *登录Action
 *负责取得表单数据,调用业务逻辑,返回转向信息.
 *
 * @author summer
 *
 */
public classLoginAction extendsAction {
 
      @Override
      public ActionForward execute(ActionMappingmapping,ActionForm form,
                    HttpServletRequest request, HttpServletResponseresponse)
                    throws Exception {
 
 
             LoginActionForm laf = (LoginActionForm)form;
             Stringusername = laf.getUsername();
             Stringpassword = laf.getPassword();
             
             UserManager userManager = newUserManager();
             //传递用户名和密码
             try
             {
                    userManager.login(username, password);
                    request.setAttribute("username", username);
                    return mapping.findForward("success");
             }catch(UserNotFoundException e)
             {
                    e.printStackTrace();
                    request.setAttribute("msg","用户不能找到,用户名称=[" +username +"+]");
             }catch(PasswordErrorException e)
             {
                    e.printStackTrace();
                    request.setAttribute("msg","密码错误");
             }
             
             return mapping.findForward("error");
      }
 
}


5、          建立struts-config.xml

作为Struts框架的核心描述,struts-config.xml可以说一切尽在掌握。它不但描述了MVC模型,定义所有视图层和控制层之间的接口(ActionForm),与控制层和模型层的接口(Action)进行结合,而且可以定义一些附加组件,如国际化信息资源排至文件,标签库信息等。

仍然是站在巨人的肩膀上,将我们下载的struts  bin文件夹中的struts-config.xml文件复制到我们的项目的WEB-INF中,删除struts-config.xml中的注释部分。把ActionActionForm配置起来。ActionForm放到中,Action配置放到中,struts-config.xml配置代码如下所示。

 

 


 

 
 

    
       
    
   
    
       
              
              
       
      


 

其中form-beans元素中可以定义0个或1个以上的form-bean元素,每个form-bean被认为是一个ActionForm对象,name属性表示form-bean元素的名称,type属性指定其类名和路径。

Action-mappings元素用来包含零到多个action,其子元素action负责具体映射的详细信息。在action-mapping元素中可以定义0个或1个以上的action元素。每个action元素接受path属性定义的请求,并映射到type属性所定义的具体action对象。在映射过程中,将name属性定义的actionform一并传过去,它有如下属性:

Parameterscope两个属性指定了传送方式和范围,scope常用的值有两个“session”“request”

Validate属性指定了是否需要actionform的验证。

Forward元素,将请求success转发到/login_success.jsp页面。

 

6、          业务逻辑类UserManager和自定义异常类

代码如下所示:

packagecom.bjpowernode.struts;
 
publicclassUserManager {
      
      publicvoid login(Stringusername,Stringpassword)
      {
             if(!"admin".equals(username))
             {
                    thrownewUserNotFoundException();
             }
             
             
             if(!"admin".equals(password))
             {
                    thrownewPasswordErrorException();
             }
      }
 
}


 

自定义异常类UserNotFoundExceptionPasswordErrorException代码如下所示。

 

packagecom.bjpowernode.struts;
 
public class UserNotFoundExceptionextends RuntimeException {
 
      public UserNotFoundException() {
      }
 
      public UserNotFoundException(Stringmessage) {
             super(message);
      }
 
      public UserNotFoundException(Throwable cause) {
             super(cause);
      }
 
      public UserNotFoundException(Stringmessage,Throwable cause) {
             super(message, cause);
      }
 
}
 
packagecom.bjpowernode.struts;
 
public class PasswordErrorExceptionextends RuntimeException {
 
      public PasswordErrorException() {
      }
 
      public PasswordErrorException(Stringmessage) {
             super(message);
      }
 
      public PasswordErrorException(Throwable cause) {
             super(cause);
      }
 
      public PasswordErrorException(Stringmessage,Throwable cause) {
             super(message, cause);
      }
 
}


 

 

7、          视图jsp页面调用。

登录界面login.jsp,错误显示界面login_error.jsp,登录成功界面login_success.jsp。代码如下所示。

 

<%@pagelanguage="java" contentType="text/html; charset=GB18030"
   pageEncoding="GB18030"%>




Inserttitle here


用户:
密码:


 

Login_success.jsp.

<%@page language="java"contentType="text/html;charset=GB18030"
   pageEncoding="GB18030"%>




Insert title here


  ${username},登录成功!



 

Login_error.jsp界面。

<%@page  language="java" contentType="text/html; charset=GB18030"
   pageEncoding="GB18030"%>




Insert title here


  <%--
  <%=request.getAttribute("msg") %>
  --%>
  
  ${msg }





就这样我们实现了运用struts框架完成用户登录。就这样从初步学习到简单应用,随着应用的次数增多,我们会对struts理解越来越深刻,并且感受struts框架给我们带来的便捷。

 下一篇Struts表单处理器ActionForm(静态动态)

 

你可能感兴趣的:(【Struts】,大道至简SSH)