现在的位置: 首页 > 综合 > 正文

struts登陆

2014年01月03日 ⁄ 综合 ⁄ 共 8514字 ⁄ 字号 评论关闭

struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于
MVC的web应用程序的开发。关于Struts的相关介绍在这里就不太多介绍了。在本网站上相关内容特别多。本文只给出Struts的工作原理图。希望
能够帮助大家更好的理解Struts的开发原理和结构流程。

本文主要介绍应用Struts,编写登陆的全过程,其中验证表单的格式包括ActionForm验证、ValidatorForm验证和
DynaActionForm三种方式实现。为了方便大家学习,本文以图形的形式一步一步的展现在大学面前,一些重点的部分,或是一些Struts新的知
识例如Struts专有的标签都用红框或是红色的字体加以标记、注释。所以在阅读本之前,只要求有一定的JAVA基础,对Struts架构有一些初步了
解。就可以完成下列操作。

好了。。。我们开始吧。Good Luck !

准备工作

Eclipse 3.1

Myeclipse4.0

Tomcat 5.5

Struts1.1

Jaka_comm

mysql驱动包

首先建一个项目,这里我们用myEclipse中的Web项目,你也可以直接建一个Tomcat项目。

Eclipse开发Struts的插件很多。不同的插件建的项目可能不太一样,但工作原理都是一样,对于其它的插件这里就不太多述了。新建一个Web项目会弹出如下对话框(如图1.1):

这里我们只需填写Project
Name项就可以了,这里我以StrutsLogin命名。为项目起个名字。Location是指项目所在的路径。Source
folder指类原文件放的位置。Web root folder指页面文件所在的位置。这两个名字都可以根据情况改写。Context root
URL指上下文的路径。默认就可以了。直接点击Finish一个Web项目就建完了。然后到硬盘中找到你的项目。你会发现项目下有两个文件夹Src和
WebRoot。Src下是空的因为我们还没有建类。WebRoot下有两个文件夹META_INF和WEB_INF。WEB_INF有两个文件夹
classes和lib分别放项目编译好的类文件和项中所需要的包。WEB_INF文件夹里的内容也是我们要打包发布到服务器上的文件。

接下来使我们建好的Web项目具有开发Struts的能力,点该项目中点击右健→myeclipse→

Add Struts capabilities会弹出如是对话框,如图(1.2)

这里我们选择1.1版本其它的默认就可以了。

选中Install Struts
jars会将Struts常用的包加入项目中。但只是一些基本的包,远远满足不了我们的开发,接下我们把下载jaka-comms下的所以点jar全部拷
贝到项目的lib下,这里我们将Mysql的连接所需的包一并拷贝过去。然后到ecipse环境中刷新该项目。注意:刷新这步必须得做,要不然即使jar
拷贝到lib中也不是好用的。

准备工作就OK了。

第一步:建一个jsp页面命名为login.jsp代码如下:

<%@ page   contentType="text/html; charset=GBK"%>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>

<html:html locale="true">

   <head>

     <html:base />

<title>login.jsp</title>

    </head>

<body>

   <html:form action="login" method="post">

   <bean:message key="label.user"/>:<html:text property="username"/><br>

   <bean:message key="label.password"/>:<html:password property="password"/><br>

   <html:submit property="login"/><html:reset/>

   </html:form>

<font color="red"><html:errors/></font>

</body>

</html:html>

下面对以上代码主要详细介绍一下:下面所的html标签是struts的标签,其用法和html标签很像.主要用于显示表单元素和输入控件,显示错
误信息,显示其他HTML元素.Bean标签也是struts专有的标签.创建和复制bean的标记,脚本变量定义标记,bean翻译标记,消息国际化标
记.这里的<bean:message>国标化标签,里面的key值在applicationResource.properties里指
定.<html:errors>用于显示错误信息的标记.

applicationResource.properties配置代码如下:

label.user=username

label.password=password

error.password.length=<li>password must longer than 4.<br>

error.username.length=<li>Username must longer than 4.<br>

error.required=<li>{0} is required.<br>

error.user=user is not exist!

error.pwd=password is wrong!

errors.required={0} is required.

errors.minlength={0} can not be less than {1} characters.

errors.maxlength={0} can not be greater than {2} characters.

第二步:用向导建一个Form.用于封装表的内容.以及格式验证.

New->other->myeclipse->web struts->struts1.1->struts1.1 form弹出如下对话框.

这里我们填入Use case为login.Superclass选择ActionForm.

并加入两个Properties.Username,password.注意:这里的两个属性必须和login.jsp表单里两个标签的
properties相同,否则数据封装不过来.完成后LoginForm类生成的代码除了Username,password,和对就应的set,
get方法以外还有两个重要的方法一个是ActionErrors用于表单的格式验证.一个就是reset用于恢复到默认值.在封装表单前调用.(即
set方法之前).代码如下:

        public ActionErrors validate(

               ActionMapping mapping,

               HttpServletRequest request) {

                ActionErrors errors = new ActionErrors();

                   if(this.username==null || this.username.length()<1){

                          ActionMessage error = new ActionMessage("error.required","username");

                     errors.add("user",error);

                   }

                   if(this.username.length()<4){

                       errors.add("userLength",new ActionMessage("error.username.length"));

                     }

                   if(this.password==null || this.password.length()<1){

                          ActionMessage error = new ActionMessage("error.required","password");

                     errors.add("password",error);

                   }

                   if(this.password.length()<4){

                       errors.add("passwordLength",new ActionMessage("error.password.length"));

                     }

                   return errors;

        }

        public void reset(ActionMapping mapping, HttpServletRequest request) {

   this.username=null;

       this.password=null;

}

注:struts提供了两个类来处理错误:ActionErrors和ActionError,它们都扩展
org.apache.struts.action.ActionErrors保存着ActionError对象的集合,其中每一个代表了独立的错误信
息。每个ActionError都包含了关键字,能够映射到资源文件中存储的错误信息.

第三步:用向导建一个Action.用于逻辑控制.

New->other->myeclipse->web struts->struts1.1->struts1.1 action弹出如下对话框.(参数如图所示)

注:在action中execute方法是在提交时自动被执行的.代码如下:这里的主要功能:⑴得到连接池中的连接.⑵进行数据库的逻辑验证.⑶页面的跳转.

     public ActionForward execute(

         ActionMapping mapping,

         ActionForm form,

         HttpServletRequest request,

         HttpServletResponse response) throws Exception{

         LoginForm loginForm = (LoginForm) form;

         String username=loginForm.getUsername();

         String password=loginForm.getPassword();

        ActionForward forward=null;

     

Connection conn = this.getDataSource(request,"dataSource").getConnection();

           LoginBean loginBean=new LoginBean();

           String result=loginBean.verify(conn,username,password);

         if("OK".equals(result)){

         forward=mapping.findForward("main");

         }else if("NOUSER".equals(result)){

         forward=mapping.getInputForward();

         ActionMessages errors = new ActionErrors();

               ActionMessage error = new ActionMessage("error.user");

               errors.add("nouser", error);

              this.saveErrors(request, errors);

         

         }else{

         forward=mapping.getInputForward();

         ActionMessages errors = new ActionErrors();

               ActionMessage error = new ActionMessage("error.pwd");

               errors.add("pwd", error);

              this.saveErrors(request, errors);

         }

    return forward;

     }

第四步:创建一个类命名为LoginBean.用于对数据库的操作.这里用于验证用户名和密码.代码如下:

package com.yourcompany.struts.bean;

import java.sql.*;

public class LoginBean {

     /**

      * 根据Action中传过来的用户和密码进行验证。

      * 如果用户名不存在,则返回noUser.

      * 如果用户名存在,但密码错误则返加pwd.

      * 正确则OK.

      * @param conn Action中传过来的Connection

      * @param username

      * @param password

      * @return

      */

     public String verify(Connection conn,String username,String password){

         String result=null;

         Statement state=null;

         ResultSet rs=null;

         try {

             state=conn.createStatement();

                 rs=state.executeQuery("select password from login where username='"+username+"'");

         if(rs.next()){

             if(password.equals(rs.getString(1))){

                 result="OK";

             }else{

                 result="PWD";

             }

         }else{

             result="NOUSER";

         }

         } catch (SQLException e) {

             // TODO Auto-generated catch block

             e.printStackTrace();

         }

         return result;

         }

第五步:到这里,基本的功能就已经实现了.我们来部署测试一下吧.什么也不填会出现如果结果.

用户名正确密码不正确的情况:(如图)

用户不存在的情况:(如图)

下面给出struts-config.xml文件的代码:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>

   <data-sources>

     <data-source key="dataSource" type="org.apache.commons.dbcp.BasicDataSource">

       <set-property property="driverClassName" value="com.mysql.jdbc.Driver" />

       <set-property property="url" value="jdbc:mysql://127.0.0.1:3306/test" />

       <set-property property="username" value="root" />

       <set-property property="password" value="" />

       <set-property property="minCount" value="2" />

       <set-property property="maxCount" value="5" />

    </data-source>

   </data-sources>

   <form-beans >

     <form-bean name="loginForm" type="com.yourcompany.struts.form.LoginForm" />

     <form-bean name="validateForm" type="com.yourcompany.struts.form.ValidateForm" />

      <form-bean name="dynaLoginActionForm" type="org.apache.struts.action.DynaActionForm">

       <form-property name="username" type="java.lang.String" />

       <form-property name="pwd" type="java.lang.String" />

        </form-bean>

   </form-beans>

   <global-exceptions />

   <global-forwards >

   <forward name="main" path="/main.jsp"/>

   </global-forwards>

   <action-mappings >

     <action

       attribute="loginForm"

       input="/login.jsp"

       name="loginForm"

       path="/login"

       scope="request"

       type="com.yourcompany.struts.action.LoginAction"

       validate="true"/>

   </action-mappings>

   <message-resources parameter="com.yourcompany.struts.ApplicationResources" />

     <plug-in className="org.apache.struts.validator.ValidatorPlugIn">

     <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />

   </plug-in>

</struts-config>

注:<data-sources>为数据库连接池的配置.

   <form-beans >form的配置.这里我们用了三个form,ActionForm, ValidateForm,
DynaActionForm.这里的ValidateForm创建方法和ActionForm是一样的就不在多述了.DynaActionForm是一
个动态的Form,没有类的存在,直接在这里配置一下就可以了.

   <global-forwards >全局的forward.用于页面跳转.

   <action-mappings >action配置.

<message-resources>指定资源文件所在的位置.

<plug-in>插件所在的位置,这里我们用的验证的插件.注意必须放到<message-resources>下边.

抱歉!评论已关闭.