进入我们基于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:form 
    
    
      action
    
    
      ="register"
    
    
      >
    
    
       <
    
    
      s:textfield 
    
    
      name
    
    
      ="username"
    
    
      />
               
    
    
      <
    
    
      s:textfield 
    
    
      name
    
    
      ="username"
    
    
      />
    
    
       <
    
    
      s:password 
    
    
      name
    
    
      ="password"
    
    
      />
               
    
    
      <
    
    
      s:password 
    
    
      name
    
    
      ="password"
    
    
      />
    
    
       <
    
    
      s:submit 
    
    
      value
    
    
      ="注册"
    
    
      />
               
    
    
      <
    
    
      s:submit 
    
    
      value
    
    
      ="注册"
    
    
      />
    
    
       </
    
    
      s:form
    
    
      >
           
    
    
      </
    
    
      s:form
    
    
      >
    
    
       <
    
    
      s:fielderror
    
    
      ></
    
    
      s:fielderror
    
    
      >
           
    
    
      <
    
    
      s:fielderror
    
    
      ></
    
    
      s:fielderror
    
    
      >
    
  
    
             success.jsp注册成功页部分代码如下:   
  
 注册成功!你好,
    
    
      <
    
    
      s:property 
    
    
      value
    
    
      ="username"
    
    
      />
    
    
      !
    
      注册成功!你好,
    
    
      <
    
    
      s:property 
    
    
      value
    
    
      ="username"
    
    
      />
    
    
      !
    
  
    
             好,来开发我们的控制层吧。写个RegisterAction.java的类:
  
 package
    
    
       com.rong.action;
    
      package
    
    
       com.rong.action;
       
       import
    
    
       javax.annotation.Resource;
    
    
      import
    
    
       javax.annotation.Resource;
       import
    
    
       org.apache.struts2.config.ParentPackage;
    
    
      import
    
    
       org.apache.struts2.config.ParentPackage;
       import
    
    
       org.apache.struts2.config.Result;
    
    
      import
    
    
       org.apache.struts2.config.Result;
       import
    
    
       org.apache.struts2.config.Results;
    
    
      import
    
    
       org.apache.struts2.config.Results;
       import
    
    
       org.springframework.context.annotation.Scope;
    
    
      import
    
    
       org.springframework.context.annotation.Scope;
       import
    
    
       org.springframework.stereotype.Controller;
    
    
      import
    
    
       org.springframework.stereotype.Controller;
       import
    
    
       com.opensymphony.xwork2.ActionSupport;
    
    
      import
    
    
       com.opensymphony.xwork2.ActionSupport;
       import
    
    
       com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
    
    
      import
    
    
       com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
       import
    
    
       com.rong.entity.User;
    
    
      import
    
    
       com.rong.entity.User;
       import
    
    
       com.rong.service.UserService;
    
    
      import
    
    
       com.rong.service.UserService;
       
       @Controller    @Scope(
    
    
      "
    
    
      prototype
    
    
      "
    
    
      )        
    
    
      //
    
    
      声明此类为控制层的类,且为prototype模式调用
       @Controller    @Scope(
    
    
      "
    
    
      prototype
    
    
      "
    
    
      )        
    
    
      //
    
    
      声明此类为控制层的类,且为prototype模式调用
    
    
       @ParentPackage(value
    
    
      =
    
    
      "
    
    
      struts-default
    
    
      "
    
    
      )
    
    
      @ParentPackage(value
    
    
      =
    
    
      "
    
    
      struts-default
    
    
      "
    
    
      )
       @Results(
    
    
    
      
        {
      
       @Results(
    
    
    
      
        {
         @Result(name
      
      
        =
      
      
        "
      
      
        success
      
      
        "
      
      
        ,value
      
      
        =
      
      
        "
      
      
        success.jsp
      
      
        "
      
      
        ),
             @Result(name
      
      
        =
      
      
        "
      
      
        success
      
      
        "
      
      
        ,value
      
      
        =
      
      
        "
      
      
        success.jsp
      
      
        "
      
      
        ),
         @Result(name
      
      
        =
      
      
        "
      
      
        input
      
      
        "
      
      
        ,value
      
      
        =
      
      
        "
      
      
        register.jsp
      
      
        "
      
      
        )
             @Result(name
      
      
        =
      
      
        "
      
      
        input
      
      
        "
      
      
        ,value
      
      
        =
      
      
        "
      
      
        register.jsp
      
      
        "
      
      
        )
         }
      
    
    
      )
         }
      
    
    
      )
       public
    
    
       
    
    
      class
    
    
       RegisterAction 
    
    
      extends
    
    
       ActionSupport 
    
    
    
      
        {
      
    
    
      public
    
    
       
    
    
      class
    
    
       RegisterAction 
    
    
      extends
    
    
       ActionSupport 
    
    
    
      
        {
         
             
         @Resource(name
      
      
        =
      
      
        "
      
      
        userService
      
      
        "
      
      
        )
             @Resource(name
      
      
        =
      
      
        "
      
      
        userService
      
      
        "
      
      
        )
         private
      
      
         UserService userService;
             
      
      
        private
      
      
         UserService userService;
         
             
         private
      
      
         String username;
             
      
      
        private
      
      
         String username;
         private
      
      
         String password;
             
      
      
        private
      
      
         String password;
         
         @Override
             @Override
         public
      
      
         String execute() 
      
      
        throws
      
      
         Exception 
      
      
      
        
          {
        
             
      
      
        public
      
      
         String execute() 
      
      
        throws
      
      
         Exception 
      
      
      
        
          {
           User user 
        
        
          =
        
        
           
        
        
          new
        
        
           User();
                   User user 
        
        
          =
        
        
           
        
        
          new
        
        
           User();
           user.setUsername(
        
        
          "
        
        
          rongxinhua
        
        
          "
        
        
          );
                   user.setUsername(
        
        
          "
        
        
          rongxinhua
        
        
          "
        
        
          );
           user.setPassword(
        
        
          "
        
        
          blogjava
        
        
          "
        
        
          );
                   user.setPassword(
        
        
          "
        
        
          blogjava
        
        
          "
        
        
          );
           userService.save(user);
                   userService.save(user);
           return
        
        
           SUCCESS;
                   
        
        
          return
        
        
           SUCCESS;
           }
               }
        
      
      
         
         public
      
      
         String getUsername() 
      
      
      
        
          {
        
             
      
      
        public
      
      
         String getUsername() 
      
      
      
        
          {
           return
        
        
           username;
                   
        
        
          return
        
        
           username;
           }
               }
        
      
      
         
         @RequiredStringValidator(message 
      
      
        =
      
      
         
      
      
        "
      
      
        请 输入用户名!
      
      
        "
      
      
        )
             @RequiredStringValidator(message 
      
      
        =
      
      
         
      
      
        "
      
      
        请 输入用户名!
      
      
        "
      
      
        )
         public
      
      
         
      
      
        void
      
      
         setUsername(String username) 
      
      
      
        
          {
        
             
      
      
        public
      
      
         
      
      
        void
      
      
         setUsername(String username) 
      
      
      
        
          {
           this
        
        
          .username 
        
        
          =
        
        
           username;
                   
        
        
          this
        
        
          .username 
        
        
          =
        
        
           username;
           }
               }
        
      
      
         
         public
      
      
         String getPassword() 
      
      
      
        
          {
        
             
      
      
        public
      
      
         String getPassword() 
      
      
      
        
          {
           return
        
        
           password;
                   
        
        
          return
        
        
           password;
           }
               }
        
      
      
         
         @RequiredStringValidator(message 
      
      
        =
      
      
         
      
      
        "
      
      
        请 输入密码!
      
      
        "
      
      
        )
             @RequiredStringValidator(message 
      
      
        =
      
      
         
      
      
        "
      
      
        请 输入密码!
      
      
        "
      
      
        )
         public
      
      
         
      
      
        void
      
      
         setPassword(String password) 
      
      
      
        
          {
        
             
      
      
        public
      
      
         
      
      
        void
      
      
         setPassword(String password) 
      
      
      
        
          {
           this
        
        
          .password 
        
        
          =
        
        
           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 
    
    
      -->
    
          
    
    
      <!--
    
    
       配置Struts 2.0 
    
    
      -->
    
    
       <
    
    
      filter
    
    
      >
           
    
    
      <
    
    
      filter
    
    
      >
    
    
       <
    
    
      filter-name
    
    
      >
    
    
      struts2
    
    
      </
    
    
      filter-name
    
    
      >
               
    
    
      <
    
    
      filter-name
    
    
      >
    
    
      struts2
    
    
      </
    
    
      filter-name
    
    
      >
    
    
       <
    
    
      filter-class
    
    
      >
    
    
      org.apache.struts2.dispatcher.FilterDispatcher
    
    
      </
    
    
      filter-class
    
    
      >
               
    
    
      <
    
    
      filter-class
    
    
      >
    
    
      org.apache.struts2.dispatcher.FilterDispatcher
    
    
      </
    
    
      filter-class
    
    
      >
    
    
       <
    
    
      init-param
    
    
      >
               
    
    
      <
    
    
      init-param
    
    
      >
    
    
       <
    
    
      param-name
    
    
      >
    
    
      actionPackages
    
    
      </
    
    
      param-name
    
    
      >
                   
    
    
      <
    
    
      param-name
    
    
      >
    
    
      actionPackages
    
    
      </
    
    
      param-name
    
    
      >
    
    
       <
    
    
      param-value
    
    
      >
    
    
      com.rong.action
    
    
      </
    
    
      param-value
    
    
      >
                   
    
    
      <
    
    
      param-value
    
    
      >
    
    
      com.rong.action
    
    
      </
    
    
      param-value
    
    
      >
    
    
       </
    
    
      init-param
    
    
      >
               
    
    
      </
    
    
      init-param
    
    
      >
    
    
       </
    
    
      filter
    
    
      >
           
    
    
      </
    
    
      filter
    
    
      >
    
    
       <
    
    
      filter-mapping
    
    
      >
           
    
    
      <
    
    
      filter-mapping
    
    
      >
    
    
       <
    
    
      filter-name
    
    
      >
    
    
      struts2
    
    
      </
    
    
      filter-name
    
    
      >
               
    
    
      <
    
    
      filter-name
    
    
      >
    
    
      struts2
    
    
      </
    
    
      filter-name
    
    
      >
    
    
       <
    
    
      url-pattern
    
    
      >
    
    
      /*
    
    
      </
    
    
      url-pattern
    
    
      >
               
    
    
      <
    
    
      url-pattern
    
    
      >
    
    
      /*
    
    
      </
    
    
      url-pattern
    
    
      >
    
    
       </
    
    
      filter-mapping
    
    
      >
           
    
    
      </
    
    
      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
          
        
         谢 谢! (*^-^*)
      
    
  


 @Results(
       @Results(
     
     
             
       
					 
					