Struts2入门学习心得

来源:互联网 发布:云计算架构师要学什么 编辑:程序博客网 时间:2024/04/30 16:06

 

看这个心得前不知道您之前有没有用过WebWork2,如果用过webwork的同志们估计就不用看了,感觉Struts2和webwork用起来基本一模一样。由于我也是刚开始玩struts2,所以只是初步运用,写得不好请大家见谅。有关Struts2的标签库应用部分不做介绍及评论。

      我们首先来搭建一个空的Struts2 Web工程,在IDE中创建一个JAVAEE5的web工程(请确定是JAVAEE5的,不然还需要导入其他jar文件)。创建后请根据自己的需要将以下jar包copy到lib中:

xwork-2.1.2.jar,struts2-core-2.1.6.jar,spring-test-2.5.6.jar,ognl-2.6.11.jar,junit-3.8.1.jar,freemarker-2.3.13.jar,commons-logging-1.1.jar,commons-io-1.3.2.jar,commons-fileupload-1.2.1.jar

 

      OK,接下来在web.xml中加载Struts2应用(这部分可以直接copy用):

      <filter>
       <filter-name>struts2</filter-name>
       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
   </filter>

   <filter-mapping>
       <filter-name>struts2</filter-name>
       <url-pattern>/*</url-pattern>
   </filter-mapping>

     到现在为止,我们已经成功的将Strust2加载到了新建的工程里去了。

 

 

接下来让我们看看配置文件,我们直接在src下创建struts.xml文件,下面是我写的一个简单的应用:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <constant name="struts.devMode" value="false" /> <!-- 是否为Struts的开发模式 -->
   <constant name="struts.url.http.port" value="9999" /> <!-- 这里是确定服务器端口号,我的是9999 ~~ -->
     <constant name="struts.i18n.reload" value="true" />     <!-- 允许国际化文件重载   -->

<constant name="struts.locale" value="zh_CN" /> <!-- 这两条是确定工程字符集,我的默认是utf-8 -->
    <constant name="struts.i18n.encoding" value="UTF-8" />
    
    <!-- Add packages here -->

<package name="default" extends="struts-default">
   <action name="showSongs" method="showSongs" class="action.SongAction">
    <result name="success">index.jsp</result>   <!-- 当方法返回的是一个jsp页面的时候用前面这种方式 -->
   </action>
  
   <action name="lookLyric" method="lookSong" class="action.SongAction">
    <result name="success">showLyric.jsp</result>
   </action>
  
   <action name="addSong" method="insertSong" class="action.SongAction">

<!-- 当方法执行结束后返回到的是另一action时,用下面这种方式,这也是我用到现在感觉和webwork唯一不太一样的地方-->
    <result type="redirectAction">showSongs</result>  
   </action>
  
   <action name="editSong" method="editSong" class="action.SongAction">
    <result name="success">editSong.jsp</result>
   </action>
  
   <action name="saveSong" method="saveSong" class="action.SongAction">
    <result type="redirectAction">showSongs</result>
   </action>
  
   <action name="deleteSong" method="deleteSong" class="action.SongAction">
    <result type="redirectAction">showSongs</result>
   </action>
  
</package>
   

</struts>

    OK,其实这里的struts.xml就相当于我们用webwork中的xwork.xml、struts1中的struts-config.xml 。

简单介绍一下这个action配置的意思:

   <action name="deleteSong" method="deleteSong" class="action.SongAction">
    <result type="redirectAction">showSongs</result>
   </action>

name:既我们提交请求的方法名,等同于Struts1中的name

class:方法所在的类

一般来说一个action下都有一个默认为excute()的实现类,那么这样我只可以在这个类中声明一个方法,就像在用Struts1时我们会选择这个ActionBean继承的是普通的Action还是MappingDispatchAction抑或是DispatchAction,如果继承了普通的Action那么该类中便只能有一个对应的excute()方法,其他方法为无效,反而如果继承MappingDispatchAction的话我们的ActionBean中便可以书写并使用多个方法了。

method:该类中对应的方法名

 

 

接下来写一个简单的ActionBean我们来试一下,上面我的配置文件中声明了一个名为 editSong的Action,那么我就用这个吧:

//如果用过webwork的话这块其实是个webwork一样的

//Struts2与webwork一样,自身并不继承HttpServlet,那么取而代之的

//是com.opensymphony.xwork2.ActionSupport类

//我们完全可以把这个ActionBean当成一个javaBean来使用,而它自身又是一个方法的实现类。

public class SongAction extends ActionSupport{  
private int songId;

public int getSongId() {
   return songId;
}
public void setSongId(int songId) {
   this.songId = songId;
}


public String editSong(){

//是不是用Struts2便不支持使用HttpServlet了呢?当然不是,呵呵:
   HttpServletRequest request = ServletActionContext. getRequest();
   SongManager songManager = new SongManager();

//这里的songId我们便不用像Struts1中通过HttpRequest获取了
   Song song = songManager.getById(songId);

request.setAttribute("song", song); //这个老套路您一定天天写吧,改不了还可以接着用嘛。
   return SUCCESS;

//这里返回了一个常量SUCCESS,那么配置文件中的<result name="success">便是它了,其实我们也可以返回一个普通的字符串,例如:

return "su"; 这样也是完全可以的,OK 到此struts2已经可以用了,大家去试试吧
}

}

原创粉丝点击