速动画教程第十八集 SSH框架的构建(录像)

Posted on 2006-03-29 00:12 oksonic 阅读(16681) 评论(37)  编辑  收藏 所属分类: java

速动画教程第十八集 SSH框架的构建


录像下载 http://sonic.peakle.net/download/sonic018.rar
 

此过程将包括以下几个框架

Struts 、 Spring 、 Hibernate 、 Tiles 、 validator

 

工具 :Eclipse3.1 、 MyEclipse4.1.1 、 Poperties Editor 插件

 

新建工程 oa

 

jstl标签库很好用,所以也把它加载上

 

增加 Struts 框架

因为在整个架构中 Struts 属于 UI 层,所以将 struts 放入 com.oa.view 包中

 

增加 Spring 框架

将配置文件放入 /WEB-INF/ 目录内

 

在增加 Hibernate 框架之前,如果没有配置过数据连接的话,请打开 MyEclipse Database Exploring 视图

配置连接:以连接 MySql 为例

 

增加 Hibernate 框架

在配置选项中选择使用 Spring 的配置文件,并输入 sessionFactory

Hibernate 属于 Data 层,所以将它放入 com.oa.data 包内

 

逻辑层的包为 com.oa.model

 

以下为目录结构

+ src

   + --com.oa.data  //数据层

    + --com.oa.data.bo   //BO对像和映射文件

    + --com.oa.data.dao   //DAO对像的接口

       + --com.oa.data.dao.impl   //DAO对像的实例

   + --com.oa.model 逻辑层

    + --com.oa.model.service   // Service对像的接口

       + --com.oa.model.service.impl   //Service对像的实例

   + --com.oa.view  视图层

    + --com.oa.view.action   // Action对像

    + --com.oa.view.tag     // 标签

  

 

集成框架:

   

    Spring 和 Hibernate 的集成已经由 MyEclipse 的向导完成

    Struts 和 Spring 的集成将使用 Struts 插件的方式进行集成

    Tiles 、 validator 和 Struts 的集成也是使用插件的方式

 

完整的配置文件如下 :

<? xml version = "1.0" encoding = "UTF-8" ?>

<! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd" >

 

< struts-config >

    < data-sources />

    < form-beans />

    < global-exceptions />

    < global-forwards />

    < action-mappings />

    < message-resources parameter = "com.oa.web.struts.ApplicationResources" />

    < plug-in className = "org.apache.struts.tiles.TilesPlugin" >

       < set-property property = "definitions-parser-validate" value = "true" />

       < set-property property = "definitions-config" value = "/WEB-INF/tiles-config.xml" />

    </ plug-in >

    < plug-in className = "org.apache.struts.validator.ValidatorPlugIn" >

       < set-property property = "pathnames" value = "/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />

    </ plug-in >

    < plug-in className = "org.springframework.web.struts.ContextLoaderPlugIn" >

       < set-property property = "contextConfigLocation" value = "/WEB-INF/applicationContext.xml,/WEB-INF/serviceContext.xml,/WEB-INF/ view Context.xml" />

    </ plug-in >

</ struts-config >

 

创建 tiles-config.xml 文件 , 内容如下 :

<?xml version="1.0" encoding="UTF-8"?>

<tiles-definitions>

</tiles-definitions>

 

注意以下几点:

  多个配置文件可用逗号分隔

  Validator 的配置文件 "/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" ,这两个文件在 /WEB-INF/ 目录都没有, validator-rules.xml 文件需要从 struts 的包中拷贝过来 , validation.xml 文件需要自行创建

  此文件中spring配置文件我将它分为三个,以区分三层结构中不同的配置,请不要直接在其它两个配置文件中写配置信息,最好是先将配置信息写入到 applicationContext.xml 中,因为只有在此文件中 MyEclipse 才会验证配置信息的合法性

 

还是以 Login 为例做一下测试

 

先将大概用到的包都创建好

 

将配置文件中提到的文件都准备好

   先将 spring 的配置文件创建好,文件格式使用 applicationContext.xml 的样式,内容如下:

     serviceContext.xml   viewContext.xml

 

<? xml version = "1.0" encoding = "UTF-8" ?>

<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >

< beans >

</ beans >

 

   拷贝 validator-rules.xml 到 /WEB-INF/ 目录

   创建 validation.xml 文件到 /WEB-INF/ 目录 , 文件内容可以为空

 

创建表 , 以下语句是使用 MySqlCC 生成的

CREATE TABLE `userlist` (

  `id` int(11) NOT NULL auto_increment,

  `userName` varchar(100) NOT NULL default '',

  `userPwd` varchar(100) NOT NULL default '',

  PRIMARY KEY  (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 

打开 MyEclipse Database Exploring 视图 , 创建 userlist 表的映射

根据向导创建映射文件 , 包插抽像类和 DAO , 更改 Userlist 表映射为 User 对像

 

* 这里使用 MyEclipse4.1.1 创建映射文件后 , 文件并没有放到指定的包中 , 所以需要做以下修改

    1 、移动 AbstractUser.java 、 User.java 、 User.hbm.xml 文件到 com.oa.data.bo 包内

    2 、移动 UserDAO.java 文件到 com.oa.data.dao.impl 包内

    3 、修改 applicationContext.xml 文件 , 红色字体部份为修改后的内容

    < bean id = "sessionFactory" class = "org.springframework.orm.hibernate3.LocalSessionFactoryBean" >

       < property name = "dataSource" >

           < ref bean = "dataSource" />

       </ property >

       < property name = "hibernateProperties" >

           < props >

              < prop key = "hibernate.dialect" > org.hibernate.dialect.MySQLDialect </ prop >

           </ props >

       </ property >

       < property name = "mappingResources" >

           < list >

              < value > com/oa/data/bo/User.hbm.xml </ value >

           </ list >

       </ property >

    </ bean >

    < bean id = "UserDAO" class = " com.oa.data.dao.impl.UserDAO " >

       < property name = "sessionFactory" >

           < ref bean = "sessionFactory" />

       </ property >

    </ bean >

       4 、 修改 User.hbm.xml 文件

       将 < class name = "com.oa.data.bo.User" table = "userlist" catalog = "test" >

          改为 < class name = "com.oa.data.bo.User" table = "userlist" >

       如果不修改的话将会出现以下错误信息

org.springframework.jdbc.BadSqlGrammarException : Hibernate operation: could not execute query; bad SQL grammar [select user0_.id as id, user0_.userName as userName0_, user0_.userPwd as userPwd0_ from test__userlist user0_ where userName=?]; nested exception is java.sql.SQLException : Table 'test.test__userlist' doesn't exist

 

 

创建 UserDAO 的接口文件 IUserDAO , 移动到 com.oa.data.dao 包内 , 修改 UserDAO 的错误

 

创建 IUserService 接口文件 , 内容如下 :

package com.oa.model.service;

import com.oa.data.bo.User;

public interface IUserService {

//  验证用户是否合法 , 并返回一个 User 对像

    public User isValidUser(String username,String password);

}

 

创建此接口的实例 UserService , 此实例需要用到 userDAO , 所以需要做以下声明

private IUserDAO userDAO;

 

userDAO 属性需要使用 ioc 注入

完整代码如下 :

package com.oa.model.service.impl;

 

import com.oa.data.bo.User;

import com.oa.data.dao.IUserDAO;

import com.oa.model.service.IUserService;

 

public class UserService implements IUserService {

 

    private IUserDAO userDAO;

   

    public User isValidUser(String username, String password) {

        // TODO Auto-generated method stub

        return null;

    }

 

    public IUserDAO getUserDAO() {

        return userDAO;

    }

 

    public void setUserDAO(IUserDAO userDAO) {

        this.userDAO = userDAO;

    }

 

}

 

配置 applicationContext.xml 文件 , 增加以下代码 :

       <!-- 创建事务管理代理类 -->

    < bean id = "transactionManager" class = "org.springframework.orm.hibernate3.HibernateTransactionManager" >

       < property name = "sessionFactory" >

           < ref local = "sessionFactory" />

       </ property >

    </ bean >

    <!-- 创建用户事务代理类 -->

    < bean id = "userDaoProxy" class = "org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >

       < property name = "transactionManager" >

           < ref bean = "transactionManager" />

       </ property >

       < property name = "target" >

           < ref local = "UserDAO" />

       </ property >

       < property name = "transactionAttributes" >

           < props >

              < prop key = "insert*" > PROPAGATION_REQUIRED </ prop >

              < prop key = "update*" > PROPAGATION_REQUIRED,readOnly </ prop >

              < prop key = "*" > PROPAGATION_REQUIRED,readOnly </ prop >

           </ props >

       </ property >

    </ bean >

 

增加 ioc 注入的配置代码 , UserDAO 为 UserService 类中的 UserDAO 属性

    < bean id = "UserService" class = "com.oa.model.service.impl.UserService" >

       < property name = "userDAO" >

           < ref bean = "userDaoProxy" />

       </ property >

    </ bean >

 

这一段代码先拷贝到 applicationContext.xml 文件中 , 保存后没有错误提示后再拷贝到 serviceContext.xml 文件中

 

创建 jsp 、 from 、 Action , 这里的 Action 将继承于 org.apache.struts.actions.DispatchAction , 并改名为 UserAction 关于这个对像的说明请参考我以前发表的录像

 

修改 Action 的配置信息为 : 增加了绿色字体部份

< action

      attribute = "loginForm"

      input = "/login.jsp"

      name = "loginForm"

      parameter = "method"

      path = "/login"

      validate="true"

      scope = "request"

      type = "com.oa.web.struts.action. User Action" />

 

修改 UserAction 文件内容 , 增加 userService 属性 , 并创建 set 、 get 方法

 

配置 spring 文件 , 使用 IoC 注入到 User Action 中

在 viewContext.xml 中配置以下内容 :

    < bean name = "/login" class = "com.oa. view .struts.action.UserAction" singleton = "false" >

       < property name = "userService" >

           < ref bean = "UserService" />

       </ property >

    </ bean >

 

* 检测的话请拷贝到 applicationContext.xml 中

 

修改 Action 的配置信息为 : 将 type 修改为 spring 的代理 , 这样注入才能成功

< action

      attribute = "loginForm"

      input = "/login.jsp"

      name = "loginForm"

      parameter = "method"

      path = "/login"

      scope = "request"

      validate = "true"

      type = " org.springframework.web.struts.DelegatingActionProxy " />

 

 

修改 validation.xml 文件 , 做验证处理 , 内容如下 :

< form-validation >

    < global >

       <!-- 密码由数字、 26 个英文字母或者下划线组成的字符串   -->

       < constant >

           < constant-name > pwd </ constant-name >

           < onstant-value > ^\w+$ </ onstant-value >

       </ constant >

    </ global >

    < formset >

       < form name = "loginForm" >

           <!-- 这里的用户名使用邮箱,验证时使用正则表达式进行验证 -->

           < field property = "username" depends = "required,email" >

              < arg0 key = "user.name" />

           </ field >

           < field property = "password" depends = "required,minlength,maxlength,mask" >

              < msg name = "mask" key = "user.register.text15" />

               < arg0 key = "user.register.text09" />

              < arg1 name = "minlength" key = "${var:minlength}" resource = "false" />

              < arg2 name = "maxlength" key = "${var:maxlength}" resource = "false" />

              < var >

                                   <!-- 使用正则表达式规则验证 -->

                  < var-name > mask </ var-name >

                  < var-value > ^\w+$ </ var-value >

              </ var >

              < var >

                                   <!-- 长度不少于 6 位 -->

                  < var-name > minlength </ var-name >

                  < var-value > 6 </ var-value >

              </ var >

              < var >

                                   <!-- 密码长度不大于 20 位 -->

                  < var-name > maxlength </ var-name >

                  < var-value > 20 </ var-value >

              </ var >

           </ field >

       </ form >

    </ formset >

</ form-validation >

 

修改 ApplicationResources 资源文件内容

user.name = User Name

user.password = Password

errors.required = {0} is required.

errors.minlength = {0} cannot be less than {1} characters.

errors.maxlength = {0} cannot be greater than {1} characters.

errors.email = {0} is an invalid email address.

user.login.text1 = Password formate error!

user.login.text2 = Welcome !

user.login.text3 = Login failed !

user.login.text4 = Login succeed!

page.command.submit = Submit

 

 

创建 ApplicationResources_zh_CN 资源文件

user.name = 用户名称

user.password = 登录密码

errors.required = {0} 必需填写 !

errors.minlength = {0} 不能小于 {1} 字符

errors.maxlength = {0} 不能大于 {2} 字符

errors.email = {0} 不是有效的 E-Mail 地址

user.login.text1 = 密码格式不正确 !

user.login.text2 = 欢迎您 !

user.login.text3 = 密码错误 !

user.login.text3 = 登录成功 !

page.command.submit = 提交

 

修改 IUserDAO 文件 , 加入以下方法 :

public abstract User findByUsername(String username);

 

打开 UserDAO 文件 , 实现 findByUsername 方法 , 代码如下 :

public User findByUsername(String username) {

        // TODO Auto-generated method stub

        log.debug("getting User instance with userName: " + username);

        try {

            List list = getHibernateTemplate().find(

                    "from User as u where userName = ?", username);

            if(list.size() > 0) {

                User instance = (User) list.get(0);

                return instance;

            } else {

                return null;

            }

        } catch (RuntimeException re) {

            log.error("get failed", re);

            throw re;

        }

    }

 

修改 UserService 文件中的 isValidUser 方法 , 代码如下 :

    public User isValidUser(String username, String password) {

        // TODO Auto-generated method stub

        User user = userDAO.findByUsername(username);

        if(user == null)

            return null;

        if(user.getUserPwd().equals(password))

            return user;

        return null;

    }

 

新建 ok.jsp 文件 , 内容如下 :

<%@ page language = "java" contentType = "text/html; charset=UTF-8" %>

<%@ taglib uri = "http://jakarta.apache.org/struts/tags-bean" prefix = "bean" %>

<%@ taglib uri = "http://jakarta.apache.org/struts/tags-html" prefix = "html" %>

 

< html >

    < head >

       < title > OK!!! </ title >

    </ head >

    < body >

       < bean:message key = "user.login.text4" />

    </ body >

</ html >

 

修改 login.jsp 文件 , 内容如下 :

<%@ page language = "java" contentType = "text/html; charset=UTF-8" %>

<%@ taglib uri = "http://jakarta.apache.org/struts/tags-bean" prefix = "bean" %>

<%@ taglib uri = "http://jakarta.apache.org/struts/tags-html" prefix = "html" %>

 

< html >

    < head >

       < title > JSP for loginForm form </ title >

    </ head >

    < body >

       < html:errors />< br >

       < html:form action = "/login" >

           < bean:message key = "user.name" /> : < html:text property = "username" />< br />

           < bean:message key = "user.password" /> : < html:password property = "password" />< br />

           < input type = "submit" value = " < bean:message key = "page.command.submit" /> " onclick = "document.forms[0].action='login.do?method=loginAction';document.forms[0].submit();" >

       </ html:form >

    </ body >

</ html >

 

 

修改 struts-config.xml 文件 , 配置转向 :

<global-forwards >

    <forward name="goOk" path="/ok.jsp" />

</global-forwards>

 

修改 loginAction 事件代码 :

public ActionForward loginAction(

        ActionMapping mapping,

        ActionForm form,

        HttpServletRequest request,

        HttpServletResponse response) {

        DynaValidatorForm loginForm = (DynaValidatorForm) form;

        // TODO Auto-generated method stub

        ActionMessages errors = new ActionMessages();

        String username = loginForm.getString("username");

        String password = loginForm.getString("password");

        User user = userService.isValidUser(username,password);

        if(user != null){

            request.setAttribute("USER",user);

            return mapping.findForward("goOk");

        } else {

            errors.add("loginfailure",new ActionMessage("user.login.text3"));

            saveErrors(request,errors);

            return mapping.getInputForward();

        }

    }

 

代码完成 , 进行测试 :http://localhost/oa/login.jsp 在此之前请在数据库中手动增加一行记录 , 如 :oksonic@tom.com   abc

 

如果出现 action 出错,一般是 spring 的配置文件出现问题了,可在 src 目录下创建一个 log4j.properties 文件,内容如下:

log4j.rootLogger = DEBUG,CONSOLE,A1,im

log4j.addivity.org.apache = true

# 应用于控制台

log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender

log4j.appender.Threshold = DEBUG

log4j.appender.CONSOLE.Target = System.out

log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout

log4j.appender.CONSOLE.layout.ConversionPattern = [framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n

 

此文件将会输出日志信息到控制台,这样就可以得到错误的具体信息了。

 

此集到此结束!

 

 http://www.oksonic.cn

Email: oksonic@tom.com

   QQ: 71279650

 

Feedback

# re: 速动画教程第十八集 SSH框架的构建(文档)  回复  更多评论   

2006-03-29 08:34 by 有故事的MJ
先收藏了,谢楼主

# re: 速动画教程第十八集 SSH框架的构建(文档)  回复  更多评论   

2006-03-29 09:30 by 吴某人-不断地学习
牛啊。。。

你所有的我都收藏了。。

good...


# re: 速动画教程第十八集 SSH框架的构建(文档)  回复  更多评论   

2006-03-29 14:26 by 北极星
呵呵~~~谢谢为大家提供这么好的学习资料!!!!
谢谢啊

# re: 速动画教程第十八集 SSH框架的构建(文档)  回复  更多评论   

2006-03-29 17:46 by AAA
楼主,能不能介绍一些Tapestry

# re: 速动画教程第十八集 SSH框架的构建(文档)  回复  更多评论   

2006-03-29 18:57 by 風向逆轉 - Java无限
动画教程什么时候可以下载

# re: 速动画教程第十八集 SSH框架的构建(文档)  回复  更多评论   

2006-04-01 08:19 by aiq
怎么没地址可以下载啊

# re: 速动画教程第十八集 SSH框架的构建(文档)  回复  更多评论   

2006-04-01 16:32 by jurassic
收藏了:)

# re: 速动画教程第十八集 SSH框架的构建(文档)  回复  更多评论   

2006-04-01 21:58 by jack chen
辛苦了,谢谢!
希望日后可以看到你更多更好的东西.

# re: 速动画教程第十八集 SSH框架的构建(文档)  回复  更多评论   

2006-04-03 12:18 by 庞信诚
系统补丁

# re: 速动画教程第十八集 SSH框架的构建(文档)  回复  更多评论   

2006-04-03 16:50 by dqylyln
使用 MyEclipse4.1.1 创建映射文件关于这个能不能详细点说一下,换新版本了,4.11创建映射文件不会.谢谢了!

# re: 速动画教程第十八集 SSH框架的构建(文档)  回复  更多评论   

2006-04-06 16:18 by iamzzb
大家都喜欢你

# re: 速动画教程第十八集 SSH框架的构建(文档)  回复  更多评论   

2006-04-10 13:48 by freelancer
学了很多 不能不说谢谢阿!~~~

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2006-04-26 00:01 by chymilk
谢谢!辛苦你了....真的很不错.

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2006-04-28 11:06 by little_pig
楼主,可否也说说树跟列表的构造方面的东西啊!比如可以单选的树,多选的树,还有设计比较合理的列表等等

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2006-05-05 12:52 by jackey_zheng
楼主是牛人啊,

支持你!!!1

谢谢你帮了我们这些新人!!!

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2006-05-27 11:30 by 龙江
楼主!可不可以用 struts+hibernate+spring做一个分页的出来给小第门瞧瞧

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2006-06-06 16:11 by Seven
先谢谢楼主!!!

请问楼主为什么录像的声音总是听不清?

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2006-06-17 18:28 by mfsll
非常感谢BLOG主人的辛勤劳动,也为您真正的开源精神所打动,向您学习!!!

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2006-07-07 09:27 by 阿成
啥也不说了,顶!!!!!!

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2006-07-12 20:57 by liu
没说的。一切向楼主看齐!!

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2006-07-14 10:38 by peter
谢谢楼主拉,你是最好的程序员,也是最好的开源推动者,向你致敬!!!

# 出问题了?????  回复  更多评论   

2006-11-18 23:53 by lune
楼主,我照着你的视频做下来,在创建login.jsp时出问题了,选择“Dynamic FormBean”后,然后在下拉列表中选择“org.apache.struts.validator.DynaValidatorForm”在上面出现错误信息“Type does not exist.”,可是我也按照视频里的配置过struts-config.xml中的validator的plugin的。不知道是什么问题?????

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2006-11-29 17:40 by 小丽
请问有没有使用Idea工具来做Ejb方面的例程啊。请提供点啊。我现在正在做这个。感觉一头雾水。谢谢了啊。大哥哥。

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2006-12-18 15:02 by LeVaN
http://www.danny-kaikki-paras-disc-2.beibi.info ^^^ http://www.deitti-in-suomi.beibi.info ^^^ http://www.handjager-hetest-gallerier.biseksuell.info ^^^ http://www.foto-feit-rav.biseksuell.info ^^^ http://www.handjager-hetest-gallerier.erotiska.info ^^^ http://www.foto-feit-rav.erotiska.info ^^^ http://www.bisexuell-mogen-mpeg.fitta69.info ^^^ http://www.jpg-hemsk-kyssas.fitta69.info ^^^ http://www.rakade-kvinna.fotsex.info ^^^ http://www.titthal-bio-dvd.fotsex.info ^^^ http://www.lesbisk-maksuton-seksi.isomuna.info ^^^ http://www.sexsi-bayanlar-maksuton.isomuna.info ^^^ http://www.naken-ruokavaliot-peraaukon.laukeaminen.info ^^^ http://www.deepthroat-slyna-oral.laukeaminen.info ^^^ http://www.foto-porno-tanya.rype.info ^^^ http://www.portretter-toyte-grisete.rype.info ^^^ http://www.rav-uanstendig-filmrull.sadsprut.info ^^^ http://www.porno-fetisj-eldre.sadsprut.info ^^^ http://www.mpegit-alaston-kulttuuri.tytsy.info ^^^ http://www.small-penis-otos.tytsy.info ^^^ http://www.anal-brazilian-fucking.18analsex.com ^^^ http://www.anal-picture-catalog.18analsex.com ^^^

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2007-01-05 13:40 by leifeng
感觉逻辑层很简单.它有必要存在么

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2007-01-15 16:10 by chenhao
楼主,怎么链接下载不了

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2007-02-22 14:50 by kuangzhen
各位朋友:
http://localhost:8080/oa1/login.do?method=loginAction
提示:
HTTP Status 404 - Servlet action is not available
???
我的配置文件都是从OA目录下Copy的 ?请大家指点!!!

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2007-06-08 11:53 by ysongren
你们提供的下载网址怎么找不到http://sonic.peakle.net/download/sonic018.rar
本人QQ:774113517

# re: 速动画教程第十八集 SSH框架的构建(录像)[未登录]  回复  更多评论   

2007-11-30 16:24 by rock
十分感谢...

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2007-12-01 22:00 by liy
十分感谢...

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2008-03-06 23:27 by www
谢谢lz。
不过真郁闷,就一个登录功能就搞这么长时间!ssh架构真的复杂啊。

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2008-04-10 14:31 by 需要爱
为什么加入多表后就报404啊

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2008-05-14 09:50 by venus
好人啊!谢谢!

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2008-05-15 00:23 by mc
ssh整合有固定的顺序吗?我看过几种顺序,都搞乱了

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2008-11-08 22:04 by 微微
SSH学习--QQ群:56730039

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2009-04-24 20:47 by 灵狐家园
谢谢了

# re: 速动画教程第十八集 SSH框架的构建(录像)  回复  更多评论   

2010-12-01 14:39 by shenbo
有没有struts2、spring、hibernate、dwr的整合案例啊

posts - 103, comments - 1104, trackbacks - 0, articles - 0

Copyright © oksonic