Struts2x对比Struts1x的先进

  笔者已经毫不怀疑Struts 2x比Struts 1x强大,也不辩解Struts 1x与2x各自的优点,因为在我看来

Struts 2x继承了Struts 1x的优秀特性,并且通过Struts在项目中应用的累积,发生了不小的更适用的新功能

。下面让我结合自己的项目应用来揭秘Struts 2x的这些伟大之处。

    1.首先,Struts2是以Webwork 2作为基础发展出来,它具有IoC模式,在处理Action过程中调用的方法(

“execute”方法)是不带参数的,酷吧。

e.g.

struts1x

 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {

    ……

  return mapping.findForward("SUCCEED");
 }

 

struts2x

 public String execute() {

      ……

  return "SUCCESS";
 }

代码简洁多了,看着真舒心。不过下面这段代码看上去还真不像“execute”方法,跟普通的方法差不多。
**此处留神**  struts2x返回的对象不是ActionForward而是String,对程序员又友善了很多。
**此处留神**  struts2x不像struts1x带有参数ActionForm form,那页面数据如何得到了,yes这是重点,

very cool,
使用Struts 2.0,表单数据的输入将变得非常方便,和普通的POJO一样在Action编写Getter和Setter,然后在

JSP的UI标志的name与其对应,在提交表单到Action时,我们就可以取得其值。多完美的框架,试想不光是

action干净多了,struts-config.xml没有actionform后会减少很多好,so cool。
**此处留神**  你也许要问要取得Servlet API中的一些对象怎么办,毕竟struts2x的方法没有那些参数。
非常好的问题,此处我们有两种办法,都是在全局角度,不用每个execute逐一考虑。
1.org.apache.struts2.ServletActionContext类

HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession();

当然也可以使用com.opensymphony.xwork2.ActionContext类,ActionContext.getContext().getSession()。

以上都是静态方法来获得我们想要的参数,最为方便简洁,还能通过IoC取得,这儿不多介绍。


更令人兴奋的一点
Struts2中声明为public String methodName() 方法,都能通过配置来调用Action。
 public String testAction() {

      ……

  return "SUCCESS_TEST";
 }
想想使用struts1x时,当一个页面有去往两个提交方向的时候,我们使用dispatchAction时时多么繁琐,

struts2x已经不存在此现象。

 

2.看看两者的配置

STRUTS1.X

 

<servlet>

                   <servlet-name>action</servlet-name>

                   <servlet-class>

                            org.apache.struts.action.ActionServlet

                   </servlet-class>

                   <init-param>

                            <param-name>config</param-name>

                            <param-value>/WEB-INF/struts-config.xml</param-value>

                   </init-param>

                   <init-param>

                            <param-name>config/IVR</param-name>

                            <param-value>/WEB-INF/struts-config-IVR.xml</param-value>

                   </init-param>

                   <init-param>

                   <param-name>config/wap</param-name>

                            <param-value>

                                     /WEB-INF/struts-config-wap.xml

                            </param-value>

                   </init-param>

                   <init-param>

                            <param-name>debug</param-name>

                            <param-value>3</param-value>

                   </init-param>

                   <init-param>

                            <param-name>detail</param-name>

                            <param-value>3</param-value>

                   </init-param>

                   <load-on-startup>0</load-on-startup>

         </servlet>

      <servlet-mapping>

               <servlet-name>action</servlet-name>

               <url-pattern>*.do</url-pattern>

      </servlet-mapping>

 

作为一个servlet申明在工程的web.xml中,跟工程耦合比较紧密

再看看STRUTS2.X

 

 

<filter>

<filter-name>struts</filter-name>

<filter-class>

org.apache.struts2.dispatcher.FilterDispatcher

</filter-class>

</filter>

 

<filter-mapping>

<filter-name>struts</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

 

 

在工程的web.xml中申明成一个filter,再就是一个拦截目标的配置,其他的属性都在struts.properties


3.接着,才是更为先进的改动。曾经引以为豪的struts的tag,现在也发生了翻天覆地的变化。
struts1x
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>

struts2x
<%@ taglib prefix="s" uri="/struts-tags" %>

简洁吧,但功能呢,更为强大,它甚至可以直接支持JSTL、Groovy和Velcity。之前不乏同仁拿struts tag比

较JSTL,现在看来完全没有必要了。

struts2x还有很多贴心的功能,之前我们头疼的页面多次提交问题,现在有了新标签来处理<s:token />。
struts2x的文件上传也值得称道。struts2x的拦截器那是非常的好用。Validation也有不小的变化。
总之,strut的优良ruts框架的优良传统继续延续着……

你可能感兴趣的:(Struts2x对比Struts1x的先进)