SSH2_Extjs_框架搭建及登录功能的实现

SSH2_Extjs_框架搭建及登录功能的实现
SSH2_Extjs_框架搭建及登录功能的实现

SSH2+Extjs框架搭建本教程完成了SSH2(Spring3.0+Struts2.2.1+Hibernate3.3)整合Extjs的框架的搭建并实现了简单的用户登录验证功能。具体开发过程如下:

1.1 新建数据库和数据表

1.下载并安装Mysql,新建一个New Connection(Hostname为localhost,密码为123)

2. 登录后在左下角右击创建Schema(数据库)名为xscjmanagment,在相应的右侧选择CreateTable选项,新建登录表Dlb

3.右击表Dlb可以编辑Dlb中的列属性信息。选择Edit Table Data,进入如下页面,在其中可输入表中的数据(确保在编辑前已经点击了最下面的Edit,否则无法对表格进行编辑),进而完成了Dlb数据库的创建。该表中又一个xh为zhangsa,kl为123的用户

1.2 新建Web Project

1.3 添加Struts2开发能力

1. 右击项目—BuildPath—Add External Archives—选择如下7个jar包

还要增加antlr-2.7.2.jar、commons-lang-2.5.jar、javassist-2.3.18.jar

2. 在src目录下新建struts.xml文件,用于以后配置Action,未配置前的文件如下:

3.修改WebRoot的WEB-INF下的web.xml文件,在其中增加对struts2过滤器的配置

xmlns:xsi="https://www.360docs.net/doc/6a11306782.html,/2001/XMLSchema-instance"

xsi:schemaLocation="https://www.360docs.net/doc/6a11306782.html,/xml/ns/javaee

https://www.360docs.net/doc/6a11306782.html,/xml/ns/javaee/web-app_2_5.xsd">

ext.html

struts2

org.apache.struts2.dispatcher.FilterDispatcher

struts2

/*

注意,在配置Struts过滤器的时候,如果他的filter-class配置为org.apache.struts2.dispatcher.FilterDispatcher,则该struts必须结合

包,才能成功部署运行;另一种Struts过滤器的配置方法(用得时

候注意与相应的jar包匹配)如下:

4. 配置完成后将项目部署到服务器上运行测试,提示无问题后继续下面的操作

1.4 添加Spring开发能力

1. 右击项目,为项目添加Spring开发能力如下:

注意,在选择下面的包时要引用完全,防止后面出现因为缺少包引起的错误,所需要引用的包如下所示:

2. 选择完包以后进行下一步,添加Spring配置文件(在选中了applicationContext.xml的位置后要注意在web.xml文件中修改相应的地址信息)如下:

3. 在web.xml中添加对Spring监听器的配置和配置文件的配置如下:

org.springframework.web.context.ContextLoaderList ener

contextConfigLocation

/WEB-INF/applicationContext.xml

注意:最后一个中定义的位置要保证和和刚才新建的applicationContext.xml 文件的实际位置保持一致!否则会出现匹配错误

4. 重新部署项目,提示无误后表示Spring配置完成,接下来要整合hibernate

1.5 新建数据驱动

1. 整合Hibernate之前要先建立数据驱动:将视图切换到MyEclipse Database Explorer,然后在该视图下右击,新建数据驱动

2. 新建驱动名为:xscj,完善所连接数据库的信息,其中xscjmanagment为要连接的数据库(开始已经在1.1步中在Mysql中建好)

注意,Add JARS需要添加Mysql数据库连接包:。点击下一步完成了对数据库的链接操作,此时项目已经实现了与数据库的链接。

1.6 添加Hibernate开发能力

1. 选择为项目添加Hibernate开发能力,选择一下的开发包

2. 选择让Spring来管理Hibernate中*.hbm.xml映射文件的处理,注意Hibernate

3.2,保证和Spring的3.2进行结合配置

3. 点击Next,选中刚才创建的数据驱动进行链接,确保反向工程的实现

4. 点击Next,取消对话框中的选中信息,完成对Hibernate开发能力的添加

添加完Hibernate能力后,完成配置。

5.调错:若此时Spring配置文件applicationContext.xml出现提示有如下错误:

这是因为缺少某些包下的配置文件,添加完后错误消失Myeclipse—Build Path—Add External Archives,添加。另一个错误如下:

这是因为添加Spring开发能力的时候,选取的包不全,应该至少包括Spring2.0 AOP Libraries,Spring2.0 core Libraries ,Spring2.0 ORM/DAO/Hibernate3 Libraries这三个包,通过右击项目名称-->BuildPath-->Library-->MyEclipse Libraries将缺少包引入到项目中。添加后错误消失)

1.7 Hibernate反向工程

1. 右击项目,在src文件夹下新建一个package,命名为org.model,用来存放生成的映射文件。进入MyEclipse Database Explorer Perspective试图界面连接数据,找到要映射的表:

完善弹出对话框中的内容,选择存放地址选择model包,注意要取消Generate precise findBy methods的复选框和Create abstract class选项框

注意不选的地方,若多选会生成很多文件,不方便整合和管理。下一步主键生成策略为identity

然后点击Next,直至Finish即可。架构如下:

重启Server,看程序是否能够正常运行,这时候一般会提示错误:

错误,这是因为导入的Spring包和Hibernate包又冲突,可以通过

①把asm.jar, asm-attrs.jar, cglib-2.1.3.jar三个文件从项目里导出,并删掉就OK

②由于cglib-2.1.3 依赖的asm 跟在外边的asm版本不一致导致, 把cglib换成cglib-nodep

版本的就可以了。建议用第一种方法!删除后重启Server成功:

至此,三层架构搭建完毕!下面就是对项目进行分层,完成一个用户登录验证功能!

1.8 Dao层及其实现和部署

1.Dao层介绍:

Dao层用于封装数据库操作,每一个Dao组建包含了数据库的访问逻辑,可对实现一个数据表完成基本的CRUD操作。Spring为Hibernate提供的Dao支持类是HibernateDaoSupport。Dao层的操作分为三个步骤:Dao接口,Dao实现,Dao部署(1)Dao层接口实现

Dao接口提供了对持久化对象的CRUD原子操作(在接口类中对包含的各种CRUD方法进行了声明,有些IDE组件可以自动生成基本的CRUD方法比如Myeclipse)。Dao中的CRUD方法会随着业务逻辑的需求增加,但有几个方法是通用的:get(Serializable id); save(Object entity); update(Object entity); delete(Object entity); findall(Serializable id);并且接口无需给出任何实现。一般每个Dao接口都包含了6个基本方法,并在此基础上增加了很多其他的方法。在src文件下新建包org.dao,在其中Dlbdao.java(Dao接口)内容如下:

package org.dao;

import org.model.Dlb;

public interface DlbDao {

public boolean findandcheck(Dlb dlb);

}

(2)Dao层实现:Spring为Hibernate提供了Dao的基类HibernateDaoSupport,通过该类传入一个SessionFactory引用可以得到一个HibernateTemplate的实例,通过该HT实现对数据库的大部分操作。本配置中的实现Dao实现类在Hibernate逆向工程中就已经自动实现了。对其改名并将其放在org.dao.imp的包下,便于管理。

package org.dao.imp;

import java.util.List;

………………

public class DlbDaoImp extends HibernateDaoSupport implements DlbDao { private static final Log log = LogFactory.getLog(DlbDaoImp.class);

public boolean findandcheck(Dlb dlb) {

String str[]={dlb.getUsername(),dlb.getPassword()};

List l=getHibernateTemplate().find("from Dlb where username=? and password=?",str);

if(l.size()>0) return true;

else return false;

}

public static DlbDaoImp

getFromApplicationContext(ApplicationContext ctx) {

return (DlbDaoImp) ctx.getBean("DlbDAO");

}

}

通过save完成保存到数据库的操作,但是却不与数据库交互,这就Dao层(3)Dao层的部署

实现了Dao层的接口和实现了类以后,所有DAO层的实现类都需要在Spring配置,并且必须获得一个SessionFactory的引用,然后才能完成持久化访问。换句话说,DAO的实现类都交由Spring容器的Bean来管理。参考Spring的applicationContext.xml中的配置DAO 的部分代码如下(自动形成的):

1.9 Service层及其实现层

业务逻辑组件能够对系统中的不同角色提供各自的业务逻辑实现,并且每个逻辑组件封装了所有的Dao组件,并可对其进行调用.Service层只关心业务逻辑的实现,Service方法全是系统中Actor所进行的实际操作的名称,系统中有多少业务需求,业务逻辑组件Service 就提供多少个对应方法。Service主要实现对DAO层的调用,并实现了依赖注入。

Service的接口层对登录验证功能的实现如下:

package org.service;

import org.model.*;

public interface DlbService {

public boolean checkin(Dlb dlb);

}

依赖注入首先要在需要注入的类中声明一个变量(对象),同时生成该变量(对象)的setter方法。其次需要在Spring配置文件中设置需要注入的对象。

package org.service.imp;

import org.dao.DlbDao;

import org.model.Dlb;

import org.service.DlbService;

public class DlbServiceImp implements DlbService {

private DlbDao dlbDao;

public DlbDao getDlbDao() {

return dlbDao;

}

public void setDlbDao(DlbDao dlbDao) {

this.dlbDao = dlbDao;

}

public boolean checkin(Dlb dlb) {

boolean s=dlbDao.findandcheck(dlb);

return s;

}

}

最后,需要在applicationContext.xml中对Service层添加如下配置(其中dlbDao为上述在applicationContext中对Dao层的配置):

//在Dao.imp中依赖注入的Dao对象名称

//调用bean的id为DlbDAO的Dao层组件

选择:是否添加事务管理(采用BeanNameAutoProxyCreator,根据Bean Name自动生成事务代理的方式):

class="org.springframework.orm.hibernate3.HibernateTransactionManager">

class="org.springframework.transaction.interceptor.TransactionInterceptor">

PROPAGA TION_REQUIRED

PROPAGA TION_REQUIRED

class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">

xsService

kcService

cjService

zyService

transactionInterceptor

此时重新部署项目,如果出现错误为:Unable to load Configuration ,然后出现C://..apache…等问题的时候,是因为Spring和Struts2还没有完全结合起来,这时候需要这是由于缺少包

(版本2.1.8不行,我们用得struts2的包为2.1.6)从而导致无法将Dao层和Service层联系到一起。在BulidPath中导入该包

nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type [org.dao.imp.DlbDaoimp] to required type [org.dao.DlbDao] for property 'dlbDao'; nested exception is https://www.360docs.net/doc/6a11306782.html,ng.IllegalArgumentException: Cannot convert value of type [org.dao.imp.DlbDaoimp] to required type [org.dao.DlbDao] for property 'dlbDao': no matching editors or conversion strategy found 这是DlbDaoImp.java由于是自动生成的,没有继承后来新建的接口DlbDao.java,所以修改代码,添加继承属性

否则错误一致得不到解决。(重要!!)

2.0 实现层JSP页面实现及部署

新建登陆页面inpu.jsp如下:

<%@page language="java"pageEncoding="UTF-8"%>

<%@page language="java"import="java.util.*"pageEncoding="gbk"%>


用户名:


密 码:



在src下建立包org.action包,并在其中添加文件CheckAction.java来获取jsp传过来的数据:

package org.action;

import javax.servlet.http.HttpServletRequest; ………………………………………………………

public class CheckAction extends ActionSupport {

private static final long serialVersionUID = 1L;

private DlbService dlbService;

private Dlb dlb;

private boolean success;

private String message;

public String execute() throws Exception {

boolean s=dlbService.checkin(dlb);

if(s){

System.out.println(“成功登录”);

this.success = true;//用于extjs返回成功与否的信息

this.message = "Checkin Success";

}else {

System.out.println(“登录失败”);

this.success=false;

this.message="No User";

}

return SUCCESS;

}

}

//在applicationContext.xml中添加对action的支持:

最后需要在Struts.xml中对action进行配置

/success.jsp

/index.jsp

2.1 项目部署和测试

注意:若出现Unable to load Configuration—apache…%...错误的原因是没有引入spring 和struts整合的jar包;

出现Error Creating bean “SessionFactory”。。。可能是因为jar包冲突(asm)

2.2 整合Extjs

配置完SSH2的框架后,开始对显示层进行优化。通过Extjs作为显示层来实现异步提

交。修改显示页面为ext.html其内容如下(包含生成数字验证码):

RuanjianShijianpingtaiProject

href="ext/resources/css/ext-all.css">

其中指定了参数的提交方式:异步提交,并且将读取的数据转化成JSON格式传给服务器,大大减少了服务器端处理数据的压力,提高了工作效率

要实现数据类型的转换,需要添加jar包:,然后修改Struts.xml 来确保能够获取JSON数据,将其传到相应的Action,并且读取到Action的返回信息

//确保Action的返回参数一定准确读取

success,message

最后需要修改Action的内容,添加success和message来返回相应的响应信息public String execute() throws Exception {

System.out.print("Hello!");

dlbService.add(dlb);//调用service层的处理方法

this.success = true;

this.message = "成功咯";

return SUCCESS;

}

其中对于:

html:

'

不清?请单击图片换一张

'

表示该信息在图片不能显示的时候出现src是图片的来源,这里通过V.jsp生成了一个四个数字字符的验证码syyle表示鼠标移动到图片上时候变为手的形状onclick是触发事件,"this.src=\'V.jsp?\'+new Date()"表示这是表示当前图片链接在当前链接值的基础上添加了一个问号。譬如当前src="check.aspx",点击后就变成了"check.aspx?",继续点就会变成"check.aspx?????" 。这个问号是没有实际意义的,它唯一的作用是向IE表明: 图片链接发生了变化,图片需要刷新。不用非得加上‘?’,加什么都一样,加随机码也可以Math.random(),防止缓存。例如刷新验证码的时候就是document.getElementById("pic").src="validate.aspx?"+Math.random();将this.src原值后加上?,以便向服务器发送一个新的GET方法,从而获取新的验证码

V.jsp页面内容(项目中改为了Code.java)如下:

<%@page contentType="image/jpeg"

import="java.util.*,java.awt.*,java.io.*,java.awt.image.*,javax.i mageio.*"

pageEncoding="gbk"%>

<%!

Color getRandColor(int fc,int bc){

Random random = new Random();

if(fc>255) fc=255;

if(bc>255) bc=255;

int r=fc+random.nextInt(bc-fc);

int g=fc+random.nextInt(bc-fc);

int b=fc+random.nextInt(bc-fc);

return new Color(r,g,b);

}

相关主题
相关文档
最新文档