本系列只是很简单的一个入门了解,不涉及深入的应用
首先一点,struts2.0并不是struts的升级版本,比较准确的说来应该是webwork+struts,但是他更像webwork,它里面的很多东西都和struts不一样了,最直观的看struts2.0里面没有Servlet,没有ActionForm等,而且很多底层的实现完全不一样了。
我们来看下如何创建一个struts2.0项目,首先肯定是导包,具体什么包就不说了,自己去查资料。
刚才我们说struts2.0里面没有Action,那它靠什么来转发页面呢?对,就是Filter,我们知道所有的请求都将先经过Filter,所以它可以用来控制转发,那我们就得在web.xml中配置Filter,struts2.0已经给我们写好了转发的Filter了,所以我们只需要配置上:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
接下来就写好我们的页面,还是以login为例,页面向后台传输一个userName和password,显然form表单提交后交给哪个Action处理是需要我们配置的,注意这里和struts不一样,用的是struts.xml配置文件,该文件在src下:
<struts>
<package name="testStruts2" extends="struts-default">
<action name="login" class="com.lei.action.LoginAction">
<result>/index.jsp</result>
<result name="input">/login2.jsp</result>
</action>
</package>
</struts>
相信已经学习过struts的朋友很容易能看懂这个配置的意思。但是问题又来了,struts2.0里面没有ActionForm,那view上的数据怎么交给Action呢?我们在LoginAction(不需要继承Action)里面设置了两个属性,分别是userName和password,注意名字最好和表单里的名字一样,这样提交请求后,值就自动的放进去了,同样validate方法也写在Action里面(但是要继承ActionSupport),Action的执行方法仍然是execute。。。
以上就是struts2.0的整个简单流程,下面我们来看个特殊的例子:
如果页面上传递过来的数据是一个坐标数据,那我们该怎么接收呢?这时我们就需要自己写一个数据转换器专门来处理这样的数据:
public class PointConversion extends DefaultTypeConverter {
@Override
public Object convertValue(Map context, Object value, Class toType) {
if(toType.getName().equals("com.lei.Bean.PointBean")){
String[] s = (String[])value;
String xyValue = s[0];
String[] xy = xyValue.split(",");
int x = Integer.parseInt(xy[0]);
int y = Integer.parseInt(xy[1]);
PointBean point = new PointBean();
point.setX(x);
point.setY(y);
return point;
}
if(toType.getName().equals("java.lang.String")){
PointBean point = (PointBean)value;
String re = "["+point.getX()+" "+point.getY()+"]";
return re;
}
return null;
}
}
参数中,value就是传递过来的数据,toType表示将该数据转换成什么类型的数据。同时我们需要创建一个bean,这里我们暂时命名为PointBean,里面有两个属性,int x,int y。在Action中我们设置一个属性为PointBean类型,并给出变量名为point,这样并没有结果,我们还得在Action的同级目录下创建一个叫
InputAction-conversion.properties的属性文件,里面配置:point=com.lei.conversion.PointConversion,注意,键就是我们的变量名,值是我们的转换器的全路径,当然我们也可以在src包下配置,区别在于:src下配置的属性文件名是xwork-conversion.properties,他可以供所有的Action用,而前面的配置方法只能供名字是InputAction的Action调用。