




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ssi框架学习总结最近由于新公司对框架的要求,需要了解下ssi的框架结构以及具体使用方法。由于之前的公司使用的是springMVC,还是有点区别,所以经过大规模的网上收集和整理资料,对ssi框架做了初步的总结并编写了一个相关的demo(新手求不喷哈),大致总结了这么几点:框架简介:相信大家对于mvc的三层架构已经灰常熟悉了,在这就不细讲了,个人感觉ssi的框架结构还是比较典型的mvc三层架构,还是比较容易上手的。关于这块的入门我想特别感谢下FrankHui童鞋,在他的帮助下,我才能比较快滴熟悉了这个架构,对我学习ssi的框架还是很有帮助滴。ssi的框架主要是由struts2,spring以及ibatis组成,他们负责各层之间的交互与协作,从而实现整个web端的功能实现与整合。Struts目前主要负责数据传递和控制方面,spring则依靠其强大的依赖注入技术实现了类似bean托管和整合等功能,当然这只是spring功能中的冰山一角,而ibatis作为一种轻量级的OR Mapping框架,提供了半自动化对象关系映射的实现,自由度相对于hibernate更高。框架结构:这是我在网上找到的一张关于ssi框架的结构图,个人感觉画的还是蛮不错的,对于入门者来说,层次机构很清晰,比较实用(感谢这位大大的分享):在这里可以很明显的看出ssi框架的大体结构以及各层之间的交互情况,顶层表现层的话,就java而言主要是jsp,html等视图层技术的编写,其中涉及我们熟悉的javascript,jquery以及extjs等。在控制层来说的话,主要是利用strust2标签功能实现action与视图层的数据交互,当然也可以使用ajax的技术实现同样的功能,这个就按个人喜好而来了。在业务逻辑层。主要是利用spring的依赖注入实现对业务逻辑类和dao类的实例托管,当然各类的实例都可以托管在spring中进行统一管理和关联,包括事务,数据源等等。在持久层,利用ibatis提供的半自动化对象关系映射的实现,开发人员可以根据需要编写具体的sql语句,通过相应的xml的配置实现对数据库的操作。总之,SSI框架能够降低我们代码的耦合度,增强了代码的健壮性和可重用性,加快了开发速度,但是也有一些不足之处,比如由于三种框架的配置文件较多,也给我们带来了一些不便,特别是对于较小的应用来说更是如此。相关demo介绍:基于之前对ssi框架的学习,我也不能免俗滴选择了做一个用户管理的web实现,项目的大致框架如下:大体上还是按照三层的分层模型来是分的,具体就不详细说了,相信大家也应该很了解整个结构的。 开发环境简介:工具:eclipse3.6+tomcat7+mysql5.1框架:struts2,spring3.0.5,ibatis26开发步骤及配置简介:第一步,众所周知肯定是导入相关的lib库啦,由于我使用的前端是extjs,所以还需要导入extjs相关的js以及css依赖文件。由于lib库太多就不截图了,只截取extjs的相关依赖文件:这样基本的环境就有了,数据库的设计则需要根据model层的对象来确定。第二步,建立相关的model层,代码如下:User.java:package com.broada.demo.entity;/* * * author smm * */public class User private int id; /用户idprivate String name;/用户名称private String password;/用户密码private String username;/用户昵称private String address;/地址public String getUsername() return username;public void setUsername(String username) this.username = username;public String getAddress() return address;public void setAddress(String address) this.address = address;public int getId() return id;public void setId(int id) this.id = id;public String getName() return name;public void setName(String name) = name;public String getPassword() return password;public void setPassword(String password) this.password = password;第三步,strust的相关配置,这里就不详细讲述strust的单独配置及原理了,直接上实例中的相关配置文件,主要是strust.xml以及web.xml的相关配置,部分主要配置如下:Web.xml: struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /* strust.xml: !- 这是一个重要的地方,很多人在使用子页面后,发现子页面乱码,怎么改都不行,原因就在次,struts2的默认编码为UTF-8,乱码的同志请看看你的jsp页面上的编码是不是和这个不一致呢。只要把这里和jsp编码改一致就行了 - success.jsp error.jsp success.jsp error.jsp 这样strust的配置大致就完成了。第四步:配置ibatis的相关配置文件,主要是perties,SqlMapConfig.xml以及User.xml的配置,perties主要用于配置数据库的数据源参数,会在加载spring的时候自动初始化,ibatis数据源的配置到时可以托管给spring初始化,所以这里就不细讲了。SqlMapConfig.xml主要是配置ibatis的配置文件的位置,User.xml则用于编写相关的数据库语句等,配置大致如下:perties:jdbc.driverClass=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql:/localhost:3306/userinfojdbc.user=rootjdbc.password=123456jdbc.minPoolSize=5jdbc.maxPoolSize=20jdbc.maxIdleTime=1800jdbc.acquireIncrement=5jdbc.maxStatements=50jdbc.initialPoolSize=10jdbc.idleConnectionTestPeriod=1800jdbc.acquireRetryAttempts=30详细的参数含义在spring的配置文件会提及,就不细说了。SqlMapConfig.xml:User.xml: insert into user (name,password,username,address)values(#name#,#password#,#username#,#address#) select * from user where name = #name#; 这样,ibatis的配置大致就完成。第五步:配置spring的相关配置文件,主要是整合ibatis以及strust中用到的bean,需要配置web.xml以及applicationContext-web.xml两个配置文件:web.xml: org.springframework.web.context.ContextLoaderListener contextConfigLocation /WEB-INF/spring/applicationContext-*.xml applicationContext-web.xml: /WEB-INF/ibatis/perties /WEB-INF/ibatis/SqlMapConfig.xml 这样,ssi框架的大致配置就完成了。最后编写相关的dao层,service层,action层以及jsp等等,我就不详细说明了,直接上相关代码:RegisterAction.java:package com.broada.demo.action;/* * author smm */import com.broada.demo.entity.User;import com.broada.demo.service.UserDaoServiceInter;import com.opensymphony.xwork2.ActionSupport;public class RegisterAction extends ActionSupport private static final long serialVersionUID = 1L;private UserDaoServiceInter userdaoServiceInter;public UserDaoServiceInter getUserdaoServiceInter() return userdaoServiceInter;public void setUserdaoServiceInter(UserDaoServiceInter userdaoServiceInter) this.userdaoServiceInter = userdaoServiceInter;private String name; /用户名private String password;/密码private String username;/昵称private String address;/地址public String getUsername() return username;public void setUsername(String username) this.username = username;public String getAddress() return address;public void setAddress(String address) this.address = address;public String getName() return name;public void setName(String name) = name;public String getPassword() return password;public void setPassword(String password) this.password = password;public String addUser() System.out.println(添加成功!);User user = new User();String name = ;String password = this.password;String username = this.username;String address = this.address;user.setName(name);user.setPassword(password);user.setUsername(username);user.setAddress(address);boolean b = userdaoServiceInter.insertUser(user);if (b=true) return SUCCESS; elsereturn INPUT;public String loginUser()System.out.println(登陆=);String name = ;String password = this.password;User user = userdaoServiceInter.querybyname(name);if(user != null & password.equals(user.getPassword()return SUCCESS; else return ERROR; UserDao.java:package com.broada.demo.dao;/* * author smm */import java.util.List;import com.broada.demo.entity.User;public interface UserDao /* * 用户注册 * param user * return */public boolean insertUser(User user);/* * 根据用户名获取用户信息 * param name * return */public User queryByname(String name);UserDaoImpl.java:package com.broada.demo.daoImpl;/* * author smm */import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;import com.broada.demo.dao.UserDao;import com.broada.demo.entity.User;public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDaoOverridepublic boolean insertUser(User user) try getSqlMapClientTemplate().insert(insertUser, user);return true; catch (Exception e) e.printStackTrace();return false;Overridepublic User queryByname(String name) / TODO Auto-generated method stubtry User user =(User) getSqlMapClientTemplate().queryForObject(selsectUser, name);return user; catch (Exception e) e.printStackTrace();return null;UserDaoServiceInter.java:package com.broada.demo.service;/* * author smm */import com.broada.demo.entity.User;public interface UserDaoServiceInter /* * 用户注册服务接口 * param user * return */public boolean insertUser(User user);/* * 根据用户名获取用户信息接口 * param name * return */public User querybyname(String name);UserDaoServiceImpl.java:package com.broada.demo.serviceImpl;/* * author smm */import com.broada.demo.dao.UserDao;import com.broada.demo.entity.User;import com.broada.demo.service.UserDaoServiceInter;public class UserDaoServiceImpl implements UserDaoServiceInter private UserDao userdao;public UserDao getUserdao() return userdao;public void setUserdao(UserDao userdao) this.userdao = userdao;Overridepublic boolean insertUser(User user) return userdao.insertUser(user);Overridepublic User querybyname(String name) / TODO Auto-generated method stubreturn userdao.queryByname(name);Index.jsp:用户登陆Ext.onReady(function()initPanel(); );initPanel=function() var formPanel = new Ext.FormPanel( id: loginPanel, labelWidth: 75, frame:true, bodyStyle:margin:0 auto, width: 350, defaults: width: 250, defaultType: textfield, items: id: username,fieldLabel: 用户名,name:name,allowBlank: false,blankText: 账号不能为空, id: password, fieldLabel: 密 码,name:password,inputType: password,allowBlank: false,blankText: 密码不能为空 );var win = new Ext.Window( title:登陆界面, width:380, autoHeight: true, resizable: false, modal:true, closeAction: hide, buttonAlign:center, items:formPanel, buttons:text: 登陆,handler: function()land();, text: 重置,handler: function() Ext.getCmp(username).setValue(); Ext.getCmp(password).setValue(); ,text: 注册,handler: function()register(); ); win.show();var win1;register = function()var registerPanel = new Ext.FormPanel( id: registerPanel, labelWidth: 75, frame:true, bodyStyle:margin:0 auto, width: 350, defaults: width: 250, defaultType: textfield, items: id: registername,fieldLabel: 用户名,name:name1,allowBlank: false,blankText: 账号不能为空, id: registerpassword, fieldLabel: 登陆密 码,name:password1,inputType: password,allowBlank: false,blankText: 密码不能为空, id: registerpassword2, fieldLabel: 密码确认,name:password2,inputType: password,allowBlank: false,blankText: 密码不能为空, id: nichen,fieldLabel: 昵称,name:nichen1, id: address,fieldLabel: 地址,name:address1 );win1 = new Ext.Window( title:注册界面, width:380, autoHeight: true, resizable: false, modal:true, buttonAlign:center, items:registerPanel, buttons:text: 提交,handler: function()login();, text: 取消,handler: function()win1.close(); ); win1.show();login=function()var name = Ext.getCmp(registername).getValue(); var password = Ext.getCmp(registerpassword).getValue();var password2 = Ext.getCmp(registerpassword2).getValu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年航空企业航空机务员安全生产知识考试试题及答案
- 高校代理合作合同模板(3篇)
- 高空作业施工合同模板(3篇)
- 高空施工合同注意事项(3篇)
- 2025后浪公务员面试题及答案
- 时尚街区店面股份转让及经营管理合同
- 演艺公司导演艺人培养合同
- 互联网广告代理服务协议
- 信科专业面试题及答案
- 水下电磁探测技术-洞察及研究
- 边坡劳务合同协议
- 广西壮族自治区自然保护地 整合优化方案
- 针灸科门诊质量考核标准
- 湖北省十一校2025届高三第二次数学联考及答案
- GB/T 20424-2025重有色金属精矿产品中有害元素的限量规范
- 严重精神障碍培训课件
- 2025美国急性冠脉综合征(ACS)患者管理指南解读课件
- 吊装施工安全协议书范本
- 2025年公务员住房公积金贷款合同范例
- (2025)辅警考试题《公安基础知识》综合能力试题库(附参考答案)
- 冷库施工合同
评论
0/150
提交评论