编程资料集中营
 | 网站首页 | 文章中心 | 编程资料2 | 软件下载 | BT下载 | 八卦星闻 | 音乐在线 | 在线游戏 | 免费电影 | 进入问吧 | 
体验Struts(1)---用户登陆的实现,看到题目,您一定觉得很土,Struts早已风靡,而关于Stuts的文章也早已遍地都是,如果你觉得土那你就别看了,我只是把我这段时间学到的一些比较肤浅知识在这里记录一下,如果您真在这些连载文章中获得了您想要的知识,那么我就会很欣慰了。???????这不快毕业了吗?我选的题目就和Struts有关,做一个关于学校的毕业设计选题系统,就是B/S结构,访问数据库的一些,
您现在的位置: 编程资料,学习资料,c,c++,vc,vc++,java,jsp,j2ee,j2me,asp,php >> 文章中心 >> JAVA 专区 >> Struts 技术 >> 文章正文
【字体:
体验Struts(1)---用户登陆的实现   进入问吧

本站地址:http://www.bajiao123.com

作者:佚名    文章来源:不详    点击数:    更新时间:2007-3-23    

体验Struts(1)---用户登陆的实现

看到题目,您一定觉得很土,Struts早已风靡,而关于Stuts的文章也早已遍地都是,如果你觉得土那你就别看了,我只是把我这段时间学到的一些比较肤浅知识在这里记录一下,如果您真在这些连载文章中获得了您想要的知识,那么我就会很欣慰了。
??????? 这不快毕业了吗?我选的题目就和Struts有关,做一个关于学校的毕业设计选题系统,就是B/S结构,访问数据库的一些俗套的东西,为了巩固我这段时间学习Struts,我把这个系统竟往难里做,这样对我这个动手能力差的人,实际工作经验少的人来说,会有点帮助吧?
????????当初就是这样想的,所以就开始了我的Struts之旅。
??????? 那我就从我的第一页讲起吧,当然第一页一般都是登陆,至于怎么配置Struts,您还是参考一些别人的文章吧,我觉得写这些就够土的了,写怎么配置,怎么实现就更土!

????????<%@ page contentType="text/html; charset=gb2312"%>
????????<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
?????? <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
?????? <html:javascript dynamicJavascript="true" staticJavascript="true" formName="LoginForm"/>这句是生成验证登陆表单所需要的js代码
?????? <html:form action="/ajax.do?method=login" onsubmit="return validateLoginForm(this)">
????????????用户名:<html:text property="user" size="16" maxlength="16"/>
????????????密码:??? <html:password property="password" size="16" maxlength="16"/>
???????????????????????????<html:submit styleClass="loginbutton" property="submit" value="登陆"/>
???????????????????????????<html:button property="reg" styleClass="loginbutton"?
????????????????????????????????????onclick="window.location='ajax.do?method=register'" value="注册"/>
???????????????????????????<html:errors property="user"/><html:errors property="password"/>
???????</html:form>

?????? 把控制格式的HTML删除掉,应该剩下这些就是主干了,对于这个毕业设计选题系统,有三种角色,管理员(Admin),教师(Teacher),学生(Student)而我把他们的登陆都做到了一起,在后台这三种角色也是都放在了一个表中,对于他们这三种对象,都是继承于Person的类,所以在登陆时可以忽视他们的具体角色,用多态来实现登陆。
????????

????action="/ajax.do?method=login" :将一些关于登陆啊,注册的一些乱七八糟的操作我都放到了一个DispatchAction,之后可以用method的不同来分别调用不同的功能。
???onsubmit="return validateLoginForm(this)":这个是用来实现Struts自带的validate验证
???<html:errors property="user"/><html:errors property="password"/> :是用来显示在登陆时的错误信息

??? 在这里需要的Struts相关配置会有如下的几个方面:
??????首先是要对配置文件进行配置我们登陆时需要的FormBean和Action
???????(1)struts-config.xml:
????????????<form-bean name="LoginForm" type="com.boya.subject.view.LoginForm" />
??????????? <action path="/ajax" type="com.boya.subject.controller.InterDispatchAction" name="LoginForm" scope="request" validate="true" input="/index.jsp" parameter="method">
??????????????????<forward name="fail" path="/index.jsp" />?? 对于登陆失败,我们准备返回到这里
???????????</action>
???? (2)validation.xml:
????????????<constant>
??????????????????<constant-name>user</constant-name>
??????????????????<constant-value>^[0-9a-zA-Z]*$</constant-value>
???????????????这里是常量配置,因为我们还会需要到用户名的验证,所以把他设置为了常量
???????????</constant>
????????? 下面是对这个bean的具体严整手段了,按字段field分别来写他们所依赖depaends的检验手段,常用的有必须填required,正则表达式验证mask,最大maxlength和最小minlength
????????????<form name="LoginForm">
??????????????<field property="user"对应LoginForm里的一个属性? depends="required,mask,minlength,maxlength">
???????????????????<msg name="mask" key="input.user.mask" />从application.properties里读取input.user.mask???????????
??????????????????? <arg0 key="input.user" resource="true" />从application.properties里读取input.user
?????????????????? <arg1 name="minlength" key="${var:minlength}" resource="false" />
?????????????????? <arg1 name="maxlength" key="${var:maxlength}" resource="false" />
????????????????? 以上三部分构成了js的一条错误提示,以下是具体的严整规则了
??????????????? <var>
????????????????????<var-name>mask</var-name>
????????????????????<var-value>${user}</var-value>
????????????????</var>
????????????????<var>
????????????????????<var-name>minlength</var-name>
????????????????????<var-value>1</var-value>
????????????????</var>
????????????????<var>
????????????????????<var-name>maxlength</var-name>
????????????????????<var-value>16</var-value>
????????????????</var>
?????????</field>

???<field property="password"
????depends="required,mask,minlength,maxlength">
????<arg0 key="input.password" resource="true" />
????<arg1 name="minlength" key="${var:minlength}"
?????resource="false" />
????<arg1 name="maxlength" key="${var:maxlength}"
?????resource="false" />
????<var>
?????<var-name>mask</var-name>
?????<var-value>${password}</var-value>
????</var>
????<var>
?????<var-name>minlength</var-name>
?????<var-value>1</var-value>
????</var>
????<var>
?????<var-name>maxlength</var-name>
?????<var-value>16</var-value>
????</var>
???</field>

??</form>
?对于我们需要的FormBean是这样写的:
package com.boya.subject.view;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.*;

public class LoginForm extends ActionForm
{
??? private static final long serialVersionUID = 1L;
??? private String user = null;
??? private String password = null;

??? public String getPassword()
??? {
??????? return password;
??? }

??? public void setPassword( String password )
??? {
??????? this.password = password;
??? }

??? public String getUser()
??? {
??????? return user;
??? }

??? public void setUser( String user )
??? {
??????? this.user = user;
??? }
???
??? public void reset(ActionMapping mapping,HttpServletRequest request)
??? {
??????? this.password = null;这里很重要,当用户输入有错时,需要返回登陆界面给用户,为了用户填写方便我们可以设置返回给用户的哪部分信息设置为空
??? }
}

我用来实现登陆的DispatchAction代码如下:
??????public ActionForward login( ActionMapping mapping, ActionForm form,
??????????? HttpServletRequest req, HttpServletResponse res ) throws Exception
??? {
?????????Service service = getService();调用业务逻辑
??????? LoginForm loginForm = (LoginForm) form;获取formbean
??????? String user = loginForm.getUser();提取用户名
??????? Person person = service.getUser( user );从业务逻辑中查找用户
??????? ActionMessages messages = new ActionMessages();
??????? ActionMessage am;
??????? if ( person == null )如果用户不存在,我们就返回
??????? {
??????????? am = new ActionMessage( "index.jsp.fail.user", user );参数的意义:第一个是主串,而后面的作为arg数组
??????????? messages.add( "user", am );把错误信息放到errors 属性为user那里去显示
??????????? saveErrors( req, messages );
??????????? form.reset( mapping, req );如果出现错误,调用formbean的重置功能
??????????? return mapping.findForward( ID.FAIL );
??????? }
??????? if ( !person.getPassword().equals( loginForm.getPassword() ) )如果密码不一致
??????? {
??????????? am = new ActionMessage( "index.jsp.fail.password", user );
??????????? messages.add( "password", am );
??????????? saveErrors( req, messages );
??????????? form.reset( mapping, req );
??????????? return mapping.findForward( ID.FAIL );
??????? }
???????
????????setSessionObject( req, person.getType(), person );把用户放到session里
??????? return new ActionForward( person.getType() + ".do", true );我在每个类型用户的类中加入了一个getType来在这里调用,之后动态的去对应的admin.do,student.do,teacher.do的主页面,并且这里实现的不是请求转发,而是请求从定向
???}



誰伴我闖蕩 2006-05-25 01:05

   

进入问吧

本站地址:http://www.bajiao123.com

文章录入:admin    责任编辑:admin 
高级搜索
编程资料集中营