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

Posted on 2006-03-29 00:12 oksonic 阅读(16572) 评论(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