struts登陆

来源:互联网 发布:淘宝哪些店卖正品万斯 编辑:程序博客网 时间:2024/04/29 17:57
 

 

 

struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVCweb应用程序的开发。关于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项目就建完了。然后到硬盘中找到你的项目。你会发现项目下有两个文件夹SrcWebRootSrc下是空的因为我们还没有建类。WebRoot下有两个文件夹META_INFWEB_INFWEB_INF有两个文件夹classeslib分别放项目编译好的类文件和项中所需要的包。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 caseloginSuperclass选择ActionForm.

并加入两个PropertiesUsername,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提供了两个类来处理错误:ActionErrorsActionError,它们都扩展org.apache.struts.action.ActionErrors保存着ActionError对象的集合,其中每一个代表了独立的错误信息。每个ActionError都包含了关键字,能够映射到资源文件中存储的错误信息.

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

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

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

    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.*;

/**

 * @author 刘元喜

 * @version1.0

 */

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

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

  <action-mappings >action配置.

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

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