struts旅程(二)Struts登录示例

来源:互联网 发布:sql多行合并相同条件 编辑:程序博客网 时间:2024/06/05 17:35

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



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进行配置。

[html] view plaincopyprint?
  1. <servlet>  
  2.    <servlet-name>action</servlet-name>  
  3.    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>  
  4.    <init-param>  
  5.      <param-name>config</param-name>  
  6.      <param-value>/WEB-INF/struts-config.xml</param-value>  
  7.    </init-param>  
  8.    <init-param>  
  9.      <param-name>debug</param-name>  
  10.      <param-value>2</param-value>  
  11.    </init-param>  
  12.    <init-param>  
  13.      <param-name>detail</param-name>  
  14.      <param-value>2</param-value>  
  15.    </init-param>  
  16.    <load-on-startup>2</load-on-startup>  
  17.  </servlet>  
  18.    
  19.    
  20.  <!--Standard Action Servlet Mapping -->  
  21.  <servlet-mapping>  
  22.    <servlet-name>action</servlet-name>  
  23.    <url-pattern>*.do</url-pattern>  
  24.  </servlet-mapping>  
<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>


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

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

[java] view plaincopyprint?
  1. package com.bjpowernode.struts;  
  2. import org.apache.struts.action.ActionForm;  
  3.    
  4. /** 
  5.  * 登录ActionForm,负责表单收集数据. 
  6.  * 表单的属性必须和ActionForm中的get和set的属性一致. 
  7.  * @author summer 
  8.  * 
  9.  */  
  10. public classLoginActionForm extends ActionForm {  
  11.    
  12.     //用户名。   
  13.     private Stringusername;  
  14.     //密码。   
  15.     private String password;  
  16.      
  17.     //设置密码。   
  18.     public voidsetPassword(Stringpassword) {  
  19.        this.password = password;  
  20.     }  
  21.     //得到用户名。   
  22.     public StringgetUsername() {  
  23.        return username;  
  24.     }  
  25.     //设置用户名。   
  26.     public voidsetUsername(Stringusername) {  
  27.        this.username = username;  
  28.     }  
  29.     //得到密码。   
  30.     public StringgetPassword() {  
  31.      
  32.        return password;  
  33.     }  
  34.      
  35. }  
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方法。代码如下所示。

[java] view plaincopyprint?
  1. packagecom.bjpowernode.struts;  
  2.    
  3. importjavax.servlet.http.HttpServletRequest;  
  4. importjavax.servlet.http.HttpServletResponse;  
  5.    
  6. importorg.apache.struts.action.Action;  
  7. importorg.apache.struts.action.ActionForm;  
  8. importorg.apache.struts.action.ActionForward;  
  9. importorg.apache.struts.action.ActionMapping;  
  10.    
  11. /** 
  12.  *登录Action 
  13.  *负责取得表单数据,调用业务逻辑,返回转向信息. 
  14.  * 
  15.  * @author summer 
  16.  * 
  17.  */  
  18. public classLoginAction extendsAction {  
  19.    
  20.       @Override  
  21.       public ActionForward execute(ActionMappingmapping,ActionForm form,  
  22.                     HttpServletRequest request, HttpServletResponseresponse)  
  23.                     throws Exception {  
  24.    
  25.    
  26.              LoginActionForm laf = (LoginActionForm)form;  
  27.              Stringusername = laf.getUsername();  
  28.              Stringpassword = laf.getPassword();  
  29.                
  30.              UserManager userManager = newUserManager();  
  31.              //传递用户名和密码   
  32.              try  
  33.              {  
  34.                     userManager.login(username, password);  
  35.                     request.setAttribute("username", username);  
  36.                     return mapping.findForward("success");  
  37.              }catch(UserNotFoundException e)  
  38.              {  
  39.                     e.printStackTrace();  
  40.                     request.setAttribute("msg","用户不能找到,用户名称=[" +username +"+]");  
  41.              }catch(PasswordErrorException e)  
  42.              {  
  43.                     e.printStackTrace();  
  44.                     request.setAttribute("msg","密码错误");  
  45.              }  
  46.                
  47.              return mapping.findForward("error");  
  48.       }  
  49.    
  50. }  
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放到<form-beans></form-beans>中,Action配置放到<action-mappings></action-mappings>中,struts-config.xml配置代码如下所示。

 

 

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
  2.    
  3. <!DOCTYPE struts-config PUBLIC  
  4.          "-//Apache Software Foundation//DTD Struts Configuration1.2//EN"  
  5.          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">  
  6.    
  7.    
  8. <struts-config>  
  9.     <form-beans>  
  10.        <form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"/>  
  11.     </form-beans>  
  12.      
  13.     <action-mappings>  
  14.        <action path="/login"  
  15.               type="com.bjpowernode.struts.LoginAction"  
  16.               name="loginForm"  
  17.               scope="request"  
  18.               >  
  19.               <forward name="success" path="/login_success.jsp"/>  
  20.               <forward name="error" path="/login_error.jsp"/>  
  21.        </action>  
  22.     </action-mappings>    
  23. </struts-config>  
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC         "-//Apache Software Foundation//DTD Struts Configuration1.2//EN"         "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">  <struts-config>    <form-beans>       <form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"/>    </form-beans>       <action-mappings>       <action path="/login"              type="com.bjpowernode.struts.LoginAction"              name="loginForm"              scope="request"              >              <forward name="success" path="/login_success.jsp"/>              <forward name="error" path="/login_error.jsp"/>       </action>    </action-mappings>  </struts-config>


 

其中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和自定义异常类

代码如下所示:

[java] view plaincopyprint?
  1. packagecom.bjpowernode.struts;  
  2.    
  3. publicclassUserManager {  
  4.         
  5.       publicvoid login(Stringusername,Stringpassword)  
  6.       {  
  7.              if(!"admin".equals(username))  
  8.              {  
  9.                     thrownewUserNotFoundException();  
  10.              }  
  11.                
  12.                
  13.              if(!"admin".equals(password))  
  14.              {  
  15.                     thrownewPasswordErrorException();  
  16.              }  
  17.       }  
  18.    
  19. }  
packagecom.bjpowernode.struts; publicclassUserManager {            publicvoid login(Stringusername,Stringpassword)      {             if(!"admin".equals(username))             {                    thrownewUserNotFoundException();             }                                       if(!"admin".equals(password))             {                    thrownewPasswordErrorException();             }      } }


 

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

 

[java] view plaincopyprint?
  1. packagecom.bjpowernode.struts;  
  2.    
  3. public class UserNotFoundExceptionextends RuntimeException {  
  4.    
  5.       public UserNotFoundException() {  
  6.       }  
  7.    
  8.       public UserNotFoundException(Stringmessage) {  
  9.              super(message);  
  10.       }  
  11.    
  12.       public UserNotFoundException(Throwable cause) {  
  13.              super(cause);  
  14.       }  
  15.    
  16.       public UserNotFoundException(Stringmessage,Throwable cause) {  
  17.              super(message, cause);  
  18.       }  
  19.    
  20. }  
  21.    
  22. packagecom.bjpowernode.struts;  
  23.    
  24. public class PasswordErrorExceptionextends RuntimeException {  
  25.    
  26.       public PasswordErrorException() {  
  27.       }  
  28.    
  29.       public PasswordErrorException(Stringmessage) {  
  30.              super(message);  
  31.       }  
  32.    
  33.       public PasswordErrorException(Throwable cause) {  
  34.              super(cause);  
  35.       }  
  36.    
  37.       public PasswordErrorException(Stringmessage,Throwable cause) {  
  38.              super(message, cause);  
  39.       }  
  40.    
  41. }  
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。代码如下所示。

 

[html] view plaincopyprint?
  1. <%@pagelanguage="java" contentType="text/html; charset=GB18030"  
  2.    pageEncoding="GB18030"%>  
  3. <!DOCTYPEhtml PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=GB18030">  
  7. <title>Inserttitle here</title>  
  8. </head>  
  9. <body>  
  10. <form action="login.do" method="post">  
  11.    用户:<inputtypeinputtype="text" name="username"><Br>  
  12.    密码:<inputtypeinputtype="password" name="password"></br>  
  13.    <input type="submit" value="登录">  
  14. </form>  
  15. </body>  
  16. </html>  
<%@pagelanguage="java" contentType="text/html; charset=GB18030"   pageEncoding="GB18030"%><!DOCTYPEhtml PUBLIC "-//W3C//DTDHTML 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>Inserttitle here</title></head><body><form action="login.do" method="post">   用户:<inputtype="text" name="username"><Br>   密码:<inputtype="password" name="password"></br>   <input type="submit" value="登录"></form></body></html>


 

Login_success.jsp.

[html] view plaincopyprint?
  1. <%@page language="java"contentType="text/html;charset=GB18030"  
  2.    pageEncoding="GB18030"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=GB18030">  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <body>  
  10.   ${username},登录成功!  
  11. </body>  
  12. </html>  
<%@page language="java"contentType="text/html;charset=GB18030"   pageEncoding="GB18030"%><!DOCTYPE html PUBLIC "-//W3C//DTDHTML 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>  ${username},登录成功!</body></html>


 

Login_error.jsp界面。

[html] view plaincopyprint?
  1. <%@page  language="java" contentType="text/html; charset=GB18030"  
  2.    pageEncoding="GB18030"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=GB18030">  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <body>  
  10.   <%--  
  11.   <%=request.getAttribute("msg") %>  
  12.   --%>  
  13.     
  14.   ${msg }  
  15. </body>  
  16. </html>  
<%@page  language="java" contentType="text/html; charset=GB18030"   pageEncoding="GB18030"%><!DOCTYPE html PUBLIC "-//W3C//DTDHTML 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>  <%--  <%=request.getAttribute("msg") %>  --%>    ${msg }</body></html>




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

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

 

  • 上一篇Struts旅程(一)Struts简介和原理
  • 下一篇Struts旅程(四)MVC向struts MVC框架演变过程
0 0
原创粉丝点击