虽然Struts2号称是一个全新的框架,但这仅仅是相对Struts 1而言。Struts 2 与Struts 1相比,确实有很多革命性的改进,但它并不是新发布的新框架,而是在另一个赫赫有名的框架:WebWork基础上发展起来的。从某种程度上来讲,Struts2没有继承Struts 1的血统,而是继承WebWork的血统。或者说,WebWork衍生出了Struts2,而不是Struts 1衍生了Struts2。因为Struts2是WebWork的升级,而不是一个全新的框架,因此稳定性、性能等各方面都有很好的保证:而且吸收了Struts 1和WebWork两者的优势,因此,是一个非常值得期待的框架。
Apache Struts2是一个优雅的,可扩展的JAVA EE web框架。框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。
Apache Struts 2即是之前大家所熟知的WebWork 2。在经历了几年的各自发展后,WebWork和Struts社区决定合二为一,也即是Struts 2
Struts 2 英文官方网站:
我们用struts2实现一个简单功能比如就是登录和注册,这两个方法都是在UserAction中处理.而按照通常的状况而言,一个Action中只会有一个execute方法,也就只能解决一个请求(大概看了下Struts,好像其中可以通过在form中加一个hidden元素,然后再在execute方法中用getCommond()的方法来进行判别).不过我在Struts2中没有发现类似的解决办法,该怎么办呢?
遇到这个问题之后,我自己开始没有想明白是什么状况,该怎么解决.于是在网上找了下,找到的方法貌似都不是很简单,要么就很复杂,要么就要涉及一些比较深的知识.后面我在执行这个程序的时候,发现Eclipse提出的一个warning,而正是这个warning给了我很大的提示,让我找到的解决方法.
Warning是这样的:No configuration found for the specified action: 'UserAction.action' in namespace: '/pages/user'. Form action defaulting to 'action' attribute's literal value. 原因就是我在struts.xml中定义的action的name与login.jsp中的form中的action的name不一致,将两个的名字改成相同就好了,不要求以.action结束,如都为:LoginAction,也就是struts.xml中的<action name="LoginAction" class="com.struts2.action.UserAction">,和JSP页面中的<s:form action="LoginAction" method="POST">.
而在struts.xml中定义的action还有一个参数method,既然已经可以根据action的name找到对应的action,那还要这个参数做什么呢?另外,execute在不更改的情况下,也是默认会调用的方法,再结合自己在网上找到的一些资料,我觉得可以尝试一下将struts.xml中的action中的method进行设置.于是就有了下面的两个action的配置:struts.xml中的
<action name="login" class="com.struts2.action.UserAction" method="login">
和JSP页面中的
<s:form action="login" method="POST">. 提交上面的表单form的时候,在struts.xml中找到该form对应的action的方法为login(),于是就到类UserAction中找到该方法并调用.因而也就能够调用UserAction类的login()方法了.
这样上面的问题也就可以解释了:因为两个地方定义的方法的名字不同,所以在点击登录进行login.jsp的时候就会弹出上述提示,但由于struts.xml中只定义(配置)一个action,默认的方法为execute(),故而编译器还是能够找到该方法进行执行.
根据上面的推断,因而可以再添加一个注册页面register.jsp,将其中的表单form定义为:
<s:form action="register" method="POST">,
而将struts.xml增加一个设置:
<action name="register" class="com.struts2.action.UserAction" method="register">.
这样当register.jsp的action请求被拦截器拦截之后通过struts.xml的配置就可以找到UserAction类的register()方法进行相应的处理了,因而也就可以实现一个UserAction中处理多个请求action了.
[转]http://it.chinawin.net/softwaredev/article-545d.html