分享

SSH+EXT2打造简单的应用(二)

 WindySky 2011-06-15

第二步:

 

上一篇博文我们已经把POJO类建立好了,现在我们可以发挥我们一贯的懒人作风,呵呵,继续用IDE生成我们的DAO类(实际开发中不推荐这样做,当然我们生成之后还是要修改的)

好了,为了节约空间,这里就不贴代码了,现在的程序架构如下:

 

 

好了,现在基本准备工作已经完毕,因为我们使用EXT作为视图层,现在我们可以开始设计视图层了。

 

EXT的基本知识我这里也不再复述了,直接贴代码吧,我们首先需要一个实现一个登录窗体,页面代码如下:

 

login.jsp:(我们现在把这个页面放到/WEB-INF/views/目录下面,这里用到的资源文件我会在下面提供下载,randomImgCode.do 是一个生成验证码的action,我会直接在下面的源码中提供,具体实现大家可以看看我的源码。)

 

Html代码 复制代码 收藏代码
  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  3. <html xmlns="http://www./1999/xhtml">  
  4.     <head>  
  5.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  6.         <title>简易便签系统 - 用户登录</title>  
  7.         <link rel="stylesheet" href="css/skin.css" type="text/css" />  
  8.         <script type="text/javascript" src="js/prototype.js"></script>  
  9.     </head>  
  10.     <body>  
  11.         <!--loading加载 -->  
  12.         <div id="loadingTab">  
  13.             <div class="loading-indicator">  
  14.                 <img src="js/ext/resources/images/default/shared/large-loading.gif"  
  15.                     width="32" height="32"  
  16.                     style="margin-right: 8px; float: left; vertical-align: top;" />  
  17.                     简易便签系统-   
  18.                 <span id="loading-yfo"><a href="mailto:huangking124@163.com"  
  19.                     target="_blank">开发:黄磊</a> </span>  
  20.                 <br />  
  21.                 <span id="loading-msg">加载样式表和图片...</span>  
  22.             </div>  
  23.         </div>  
  24.         <link rel="stylesheet" type="text/css"  
  25.             href="js/ext/resources/css/ext-all.css" />  
  26.         <link rel="stylesheet" type="text/css"  
  27.             href="js/ext/resources/css/xtheme-gray.css" />  
  28.         <script type="text/javascript">$('loading-msg').innerHTML = '正在加载JSUI组建...';</script>  
  29.   
  30.         <!--加载EXT核心文件-->  
  31.         <script type="text/javascript" src="js/ext/adapter/ext/ext-base.js"></script>  
  32.         <script type="text/javascript" src="js/ext/ext-all.js"></script>  
  33.         <script type="text/javascript" src="js/ext/locale/ext-lang-zh_CN.js"  
  34.             charset="utf-8"></script>  
  35.   
  36.         <script type="text/javascript">$('loading-msg').innerHTML = '正在初始化...';</script>  
  37.   
  38.         <!--加载自定义组件-->  
  39.         <script type="text/javascript" src="js/Login.js"></script>  
  40.         <script type="text/javascript">  
  41.             $('loading-msg').innerHTML = '初始化完毕!!';   
  42.             Ext.get('loadingTab').fadeOut({remove: true});//让加载标签消失   
  43.         </script>  
  44.         <div class="x-hide-display" id="imagecode">  
  45.             <img src="randomImgCode.do" title="看不清楚,刷新验证码" id="checkimg"  
  46.                 onclick="javascript:this.src='randomImgCode.do?t='+Math.random();"  
  47.                 style="border-width: 0px; cursor: hand;" />  
  48.         </div>  
  49.     </body>  
  50. </html>  

 

 login.js:(这里面的几个提交地址是暂时写上的,以后会用到

Js代码 复制代码 收藏代码
  1. /**  
  2.  * 登录界面  
  3.  * 作者:黄磊  
  4.  */  
  5. Ext.namespace('MyNote');   
  6. Ext.QuickTips.init();   
  7. Ext.BLANK_IMAGE_URL = "js/ext/resources/images/default/s.gif";   
  8. MyNote.Login = function() {   
  9.     this.init();   
  10. };   
  11.   
  12. Ext.extend(MyNote.Login, Ext.util.Observable, {   
  13.     init : function() {        
  14.         var loginwindow = new Ext.Window({  //登录窗体   
  15.             iconCls : 'key',   
  16.             title : '用户登录',   
  17.             height : 220,   
  18.             width : 290,   
  19.             closable : false,              
  20.             resizable : false,   
  21.             border : false,   
  22.             modal : true,   
  23.             items : [new Ext.FormPanel({   
  24.                 id : 'loginform',   
  25.                 bodyStyle : 'padding-top:6px',   
  26.                 labelWidth : 55,   
  27.                 frame : true,   
  28.                 labelAlign : 'right',   
  29.                 items : [new Ext.form.FieldSet({   
  30.                     autoHeight : true,   
  31.                     autoWidth : true,   
  32.                     bodyStyle : 'padding:5px',   
  33.                     title : '用户登录',   
  34.                     style : 'margin:5px',   
  35.                     items : [new Ext.form.TextField({   
  36.                         allowBlank : false,   
  37.                         itemCls : 'user',   
  38.                         blankText : '账号不能为空',   
  39.                         name : 'username',   
  40.                         fieldLabel : '账 号'  
  41.                     }), new Ext.form.TextField({   
  42.                         allowBlank : false,   
  43.                         itemCls : 'key',   
  44.                         blankText : '密码不能为空',   
  45.                         inputType : 'password',   
  46.                         name : 'userpwd',   
  47.                         fieldLabel : '密 码'  
  48.                     }), new Ext.Panel({   
  49.                         layout : 'column',   
  50.                         items : [new Ext.Panel({   
  51.                             bodyStyle : 'align:left;',   
  52.                             width : 130,   
  53.                             layout : 'form',   
  54.                             items : [new Ext.form.TextField({   
  55.                                 allowBlank : false,   
  56.                                 itemCls : 'key2',   
  57.                                 blankText : '验证码不能为空',   
  58.                                 width : 60,   
  59.                                 name : 'checkcode',   
  60.                                 fieldLabel : '验证码'  
  61.                             })]   
  62.                         }), new Ext.Panel({   
  63.                             bodyStyle : 'align:right;',   
  64.                             contentEl : 'imagecode'  
  65.                         })]   
  66.                     })]   
  67.                 })],   
  68.                 buttons : [new Ext.Button({   
  69.                     text : '登 录 系 统',   
  70.                     type : 'submit',   
  71.                     listeners : {   
  72.                         click : function() {   
  73.                             var login = Ext.getCmp('loginform');                           
  74.                             if (login.form.isValid()) {   
  75.                                 login.form.submit({   
  76.                                     waitMsg : '正在登录......',   
  77.                                     url : 'main.do?cmd=login',   
  78.                                     success : function(form, action) {   
  79.                                         form.reset();   
  80.                                         functions.waitBar('请稍后','正在加载系统...');   
  81.                                         window.location.href = 'page.do?cmd=main';   
  82.                                     },   
  83.                                     failure : function(form, action) {   
  84.                                         form.reset();   
  85.                                         Ext.MessageBox.show({   
  86.                                             title : '错 误',   
  87.                                             msg : action.result.msg,   
  88.                                             buttons : Ext.Msg.OK,   
  89.                                             icon : Ext.MessageBox.ERROR   
  90.                                         });   
  91.                                         Ext.getDom("checkimg").src = "randomImgCode.do?t="  
  92.                                                 + Math.random();   
  93.                                     }   
  94.                                 });   
  95.                             } else {   
  96.                                 Ext.MessageBox.show({   
  97.                                     title : '警 告',   
  98.                                     msg : '您的输入有问题,请检查后提交!',   
  99.                                     buttons : Ext.Msg.OK,   
  100.                                     icon : Ext.MessageBox.WARNING   
  101.                                 });   
  102.                             }   
  103.                         }   
  104.                     }   
  105.                 }), new Ext.Button({   
  106.                     text : '重 置 输 入',   
  107.                     type : 'reset',   
  108.                     listeners : {   
  109.                         click : function() {   
  110.                             Ext.getCmp("loginform").form.reset();   
  111.                         }   
  112.                     }   
  113.                 })]   
  114.             })]   
  115.         });   
  116.         loginwindow.show();   
  117.     }   
  118. });   
  119. Ext.onReady(function() {   
  120.     login = new MyNote.Login();   
  121. });  

 

 

好了,JSP文件里面的EXT路径大家可以修改成你们自己的,刚才我们是把login.jsp文件放在了/WEB-INF/views/目录下面,那我们该怎么去访问呢?

 

现在我们就开始切入下一步。

 

第三步:

 

首先我们在包lonlysky..mynote下建立一个类BaseAction,用于客户端请求处理的基类

大家可能要问,问什么要建立一个这样的ACTION呢?其实大家有没有想过,当我对客户端的一些公共的处理方法,比如获取会话中的用户信息,判断用户是否登录等等的在所有ACTION都要做的事情都放到这个基类来实现,然后其他ACTION都继承此类,那么不是可以减少很多的代码吗?而且做了SSH整合之后,STRUTS1的ACTION也实现了非单例运行模式(基于线程安全),这样做就会有很多的好处了,在这个教程后面我们可以明显的感受到,当然这只是我个人的一个想法,大家如果有更好的意见或者建议欢迎拍砖。

 

Java代码 复制代码 收藏代码
  1. /**  
  2.  * 客户端处理基类  
  3.  *   
  4.  * @author 黄磊  
  5.  *   
  6.  */  
  7. public class BaseAction extends DispatchActionSupport {   
  8.        
  9. }  

 

那么下面我们需要做的就是如何才能访问到我们刚才写的登录界面,我个人的想法是单独写一个ACTION来用作页面的跳转

 

那么,我们就在包lonlysky..mynote.action下建立一个,PageAction,我们需要的是继承自我们刚才写好的BaseAction

 

Java代码 复制代码 收藏代码
  1. /**  
  2.  * 本ACTION用于页面跳转  
  3.  *   
  4.  * @author 黄磊  
  5.  *  
  6.  */  
  7. public class PageAction extends BaseAction {   
  8.        
  9.     // 跳转用户登录界面   
  10.     public ActionForward login(ActionMapping mapping, ActionForm form,   
  11.             HttpServletRequest request, HttpServletResponse response) throws Exception {   
  12.         return mapping.findForward("login");   
  13.     }   
  14. }  

 

既然写了Action,那么我们现在要做的就是配置struts-config.xml文件,我们需要在全局跳转处加入我们的login.jsp页面,然后配置我们的PageAction

Xml代码 复制代码 收藏代码
  1. <global-forwards>  
  2.   <!-- 登录跳转 -->  
  3.   <forward name="login" path="/WEB-INF/view/login.jsp" />  
  4.  </global-forwards>  
  5.  <action-mappings>  
  6.   <action path="/randomImgCode"  
  7.    type="lonlysky..mynote.action.RandomImgCodeAction" />  
  8.   <!-- 页面跳转Action -->  
  9.   <action path="/page"  
  10.    type="lonlysky..mynote.action.PageAction" parameter="cmd" />  
  11.  </action-mappings>  

 

好了,现在我们可以运行调试我们的项目并预览效果了

 

启动服务器后我们可以尝试访问

http://localhost:8080/mynotepro/page.do?cmd=login

 

如果一切正常我们就可以看到如下效果

 

 

(未完待续)

 

本小结项目源码下载(因为空间限制,所以我删除了所有的JAR架包)

 

 

  • 大小: 20 KB
  • 大小: 10.9 KB

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多