基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3)

进入我们基于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的最好……”。当然,我没有再问他。有时候,新事物要被人们所接受,是要经历一段时间的,世界在变,知识在变,我们何不用更宽广的心态,去接受那些新生的事物?

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值