随笔-42  评论-578  文章-1  trackbacks-0

        进入我们基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发的最后一个阶段了,这阶段主要为我们的项目引进Struts2的Annotation。相对于带Annotation的Hibernate与带Annotation的Spring整合来说,带Annotation的Struts与带Annotation的Spring整合还是比较容易实现的。
        我们先来引进Struts2.0的相关jar包:xwork-2.0.5.jar,struts2-core-2.0.11.2.jar,ognl-2.6.11.jar,commons-logging.jar(这个前面已引进),freemarker-2.3.8.jar,还有Struts2.0与Spring整合所需的struts2-spring-plugin-2.0.11.2.jar。好,马上来开发我们的用户注册小例子。
        register.jsp注册页的部分代码如下:

    <s:form action="register">
        
<s:textfield name="username"/>
        
<s:password name="password"/>
        
<s:submit value="注册"/>
    
</s:form>
    
<s:fielderror></s:fielderror>

        success.jsp注册成功页部分代码如下:  
注册成功!你好,<s:property value="username"/>!

        好,来开发我们的控制层吧。写个RegisterAction.java的类:
package com.rong.action;

import javax.annotation.Resource;
import org.apache.struts2.config.ParentPackage;
import org.apache.struts2.config.Result;
import org.apache.struts2.config.Results;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.rong.entity.User;
import com.rong.service.UserService;

@Controller    @Scope(
"prototype")        //声明此类为控制层的类,且为prototype模式调用
@ParentPackage(value="struts-default")
@Results(
{
    @Result(name
="success",value="success.jsp"),
    @Result(name
="input",value="register.jsp")
}
)
public class RegisterAction extends ActionSupport {
    
    @Resource(name
="userService")
    
private UserService userService;
    
    
private String username;
    
private String password;

    @Override
    
public String execute() throws Exception {
        User user 
= new User();
        user.setUsername(
"rongxinhua");
        user.setPassword(
"blogjava");
        userService.save(user);
        
return SUCCESS;
    }


    
public String getUsername() {
        
return username;
    }


    @RequiredStringValidator(message 
= "请输入用户名!")
    
public void setUsername(String username) {
        
this.username = username;
    }


    
public String getPassword() {
        
return password;
    }


    @RequiredStringValidator(message 
= "请输入密码!")
    
public void setPassword(String password) {
        
this.password = password;
    }


}


        Spring2.5通过@Controller @Scope("prototype") 这样的注解,将Struts的Action纳为自己的控制范围之内。Struts2.0自带的@ParentPackage和@Results等注解,注明了要继承的父包和响应结果。还有@RequiredStringValidator,@RequiredFieldValidator等注解,大大方便了我们处理表单信息的校验。大家有没有发觉少了什么?我们不需要Struts.xml的配置文件了,也不需要xxx-validation.xml,也不需要写烦杂的验证代码了。岂不是很方便吗?
        不过,不要忘记了,我们还得在web.xml中配置Struts2:
    <!-- 配置Struts 2.0 -->
    
<filter>
        
<filter-name>struts2</filter-name>
        
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        
<init-param>
            
<param-name>actionPackages</param-name>
            
<param-value>com.rong.action</param-value>
        
</init-param>
    
</filter>
    
<filter-mapping>
        
<filter-name>struts2</filter-name>
        
<url-pattern>/*</url-pattern>
    
</filter-mapping>
        我们init了一个参数actionPackages,表示我们的请求到哪里寻找我们的action。举例说,我们的用户注册action="register",它默认会在com.rong.action包下寻找RegisterAction类。经过action的处理后,若返回success,则会跳到success.jsp,若校验不通过,则返回input,则请求转发回register.jsp。
        好了,看看运行效果吧!
                
        成功啦!我们基于Annotation的SSH整合开发终于完成了。我所介绍的Annotation注解其实并不多,还得靠大家找资料去学习。而我们侧重点是在用Annotation时三大框架是如何整合起来的。
        说点题外话吧,我们在开发过程中,究竟用Annotation还是XML,许多人曾问这样的问题。有培训机构的老师说过一句话,Annotation可以用,但XML配置一定要懂,因为XML配置现在还是主流。他说得也挺有道理的。有些人可能还不能接受Annotation这东西,就像我当初不大喜欢它一样。我的一位教我们Java中间件的老教师说:“Struts,Spring,Hibernate算什么技术?学EJB才是有用的。”他教我们的好像是EJB2版本的,他年轻时用Jbuilder开发过EJB的项目。如果我问他“为什么不选EJB3.0”,他会不会说:“EJB3被改得一塌糊涂,什么注解啊,改得狗屁不通,还是EJB2的最好……”。当然,我没有再问他。有时候,新事物要被人们所接受,是要经历一段时间的,世界在变,知识在变,我们何不用更宽广的心态,去接受那些新生的事物?
        (*^-^*) 本文原创,转载请注明出处, http://www.blogjava.net/rongxh7谢谢! (*^-^*)


本文原创,转载请注明出处,谢谢!http://www.blogjava.net/rongxh7(心梦帆影JavaEE技术博客)
    

posted on 2009-03-27 00:09 心梦帆影 阅读(9174) 评论(37)  编辑  收藏 所属分类: Struts2.xHibernateSpring

评论:
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-03-27 00:16 | 刘岳
哥们!!我是第一个看到这个的吧!!哈哈
  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-03-27 00:18 | 心梦帆影
@刘岳
呵呵,谢谢支持!  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-03-27 00:27 | 刘岳
加个好友吧 呵呵 我的qq:117626034 以后请多指教 msn:liuyuecn@126.com  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-03-27 00:39 | 何奇山
呵呵,顶!!!!!!  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-03-27 05:24 | 双色球
进来给你支持一下  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) [未登录] 2009-03-27 12:25 | 陈亮
好文,正在找怎么让注解配置的action使用spring的依赖注入,谢谢了!
  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) [未登录] 2009-03-27 13:25 | 屹砾
讲得蛮好啊!事务也可以用Annotation的。  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-03-30 08:38 | zhoulejian
能否发我一份原代码给我,zhoulejian@126.com谢谢!   回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-03-30 09:56 | 杯中水
下载不到 struts2-spring-plugin-2.0.11.2.jar,能不能发给我:qxpidt@163.com  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-03-30 23:21 | 心梦帆影
@杯中水
struts2-spring-plugin-2.0.11.2.jar在Struts2的解压包中可以找到,你试试找找看.  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-04-01 17:35 | 中国福利彩票
好,谢谢,呵呵,不错  回复  更多评论
  
# 最好是发布一下源码包 2009-04-07 17:36 | 余军
哥们写的是还好,有个源码包就更好了,
register.jsp注册页的部分代码如下:

<s:form action="register">
<s:textfield name="username"/>
<s:password name="password"/>
<s:submit value="注册"/>
</s:form>
<s:fielderror></s:fielderror>
success.jsp注册成功页部分代码如下: 注册成功!你好,<s:property value="username"/>!



就看不懂在写什么了 ????  回复  更多评论
  
# 最好是发布一下源码包 2009-04-07 17:38 | 余军
能否发我一份原代码给我,hzmotorola521@gmail.com谢谢!   回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-04-08 08:51 | catvoid
可不可以分享源码 拜读下~~~ catvoid@gmail.com  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-04-24 08:29 | 大法官
感谢分享  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-04-27 16:04 | ksh033
能不能发份源码给我
我按你的步骤试了会出错..
谢谢
94456671@qq.com  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-04-27 23:19 | 王大力
此实例在struts2.1.6的环境下,需要修改某些参数才能运行起来,请楼主update此篇blog,为后来的同仁造福!为谢!  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-05-04 16:19 | zhangsan
请博主把能运行的代码发上来下。我们参考做出来有问题

谢谢了  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-07-03 11:40 | ゞ沉默是金ゞ
能运行,但是怎么没有插入到数据库中呢?是因为application-common.xml文件中没有把那2个bean放开吗?  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-07-03 13:42 | ゞ沉默是金ゞ
我改了,在userDaoBean中的save方法中加了个事务提交,Transaction tx = this.getSession().beginTransaction();
tx.commit();  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-07-14 15:33 | 双色球
很好,不错  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-07-31 00:52 | 慕寒
如果这个action里有多个方法怎么去注解,,,,又如 我要对username这个字段进行判断是否被注册了,怎么去注解,@Validations怎么使用好.@RequiredStringValidator(message = "请输入用户名!")这样的验证是分开写在set方法上好还是 集中写在@Validations 里面好, 会不会写很而使代码看起来很乱.....请教了!
  回复  更多评论
  
# 运行成功,数据库没值? 2009-08-12 20:17 | 未登陆用户
我跟"ゞ沉默是金ゞ"的情况一样,请教博主:怎么解决此问题?  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-08-18 11:32 | 心飞翔
博主有没有研究过在基于Annotation的SSH配置下如何把FreeMarker进行整合,或者说Stuts2.1.6实际上是可以直接使用FreeMarker的?谢谢  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-10-28 17:43 |
注册的例子有问题吧, @Resource(name="userService")
没起到作用,userService还是为空 空指针  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2009-10-28 19:01 |
楼主 action注解service报错 空指针 可以回复吗  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2010-01-06 16:04 | lion
我运行也是nullpointerexception  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2010-04-06 09:25 | yr
老大,我想要源码。yr512656630@163.com。谢谢。。。支持你  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) [未登录] 2010-04-26 08:57 | java爱好者
不错,好东西啊!!!  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2010-06-05 15:56 | Mac Hotesion
javax.annotation.Resource 用的是javaee.jar包里面的吗?
①如果是的话,你的javaee.jar和ejb3-persistence.jar中的javax.persistence.Entity不会有冲突吗?怎么处理
②如果不是,请问你用的是那个包的?  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2010-08-03 10:03 | tt
我的SQL语句在控制台输出了。但是数据库里面没有插入啊 这是为什么?
87513277@qq.com 博主怎么联系你?  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2010-08-03 10:26 | tt
增加 <property name="connection.autocommit">true </property> ,才能使事务执行。  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) [未登录] 2010-09-01 17:50 | x
怎么验证对象?
public class TradeAction extends ActionSupport {
private Trade trade = null;
@RequiredStringValidator(message = "input ref No", fieldName = "trade.refNo")
@StringLengthFieldValidator(minLength = "2", maxLength = "12", message = "refNo minLength is ${minLength}, maxLength is ${maxLength}")
public void setTrade(Trade trade) {
this.trade = trade;
}//这样不行呀,why?  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2010-12-31 14:40 | 于楠
您好,我按着您说的方式整合时出现以下错误:
There is no Action mapped for namespace /upload and action name uploadify. - [unknown location]
<s:form action="uploadify" namespace="/upload" enctype="multipart/form-data" method="post" >
<input type='file' name='upload' id="upload" >
<input type="submit" value="上传"/>
</s:form>

@Controller
@Scope("prototype") //声明此类为控制层的类,且为prototype模式调用
@ParentPackage(value="struts-default")
@Namespace("/upload")
请问如何更正  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2011-03-31 16:52 | ln1058
struts.xml还是有必要保留的,不能什么都用注解!尤其是在修改代码,查找代码的位置时,全用注解是不方便的  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2011-04-08 22:49 | fdsfas
@何奇山
dfasdf  回复  更多评论
  
# re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3) 2011-09-01 09:57 | 河蟹上街
弄就弄完全了呀,或者发个源码包上来,总是缺东西,很难配置成功的。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: