Strusts2的原理很简单,首先,地址栏输入http://xxxx/xxxx/webapp/xx.action首先,请求会通过httpservlet发送给tomcat容器,tomcat发现这个请求是webapp的,然后去找服务器上部署的该webapp,再去看这个webapp中的web.xml文件(在web-inf目录下),web.xml中一般会配置有一个filter,是prepareAndExcuteStruts这个类,然后到src目录下找struts.xml文件,在struts.xml中配置有namespace="/",这个就是xx.jsp前面的/ 有这个就会在这个配置文件中寻找名为xx的action。找到这个对应的result的jsp文件反馈给客户端。这样就达到了请求和视图分离的目的,想要改变某个请求对应的视图,直接修改配置文件中的内容就好了。
namesapce可以“/”则访问路径是/index
也可以不写,默认不写namespace=""这样表示接受所有的action
<package name="user" namespace="/user" extends="struts-default" >
<action name="login" class="xx.xx.xx" method="add">这里的class也可以不进行配置则此时使用的是默认的action struts中的actionSupport类
<result>success.jsp</result>
<result name="default">default.jsp</result>"
</action>
</package>
如这个struts.xml的配置,当访问的时候就要写成http:localhost/8080:3306/xxwebapp/user/login.action
package主要是防止不同包中有相同的模块命名,这样会有冲突,所以使用package来进行区分。因为namespace不是/而是/user,所以在地址栏中需要加上一个/user/login
这个package下的name就是说我们想指定那个请求来执行处理该请求。class是指定的类,这个类可以是任何一个普通的类,只要里面有Public String excute(){ return "default"}这样的方法就ok了。不过一般情况下我们会继承ActionSupport或者是实现Action接口。
Action接口是Struts2导入jar包中包含的,在xwork...中的一个接口。因为ActionSupport中有很多已经封装好的方法,所以我们只用继承ActionSupport就可以了,里面有getText,validate验证等很多实用的方法。最后的method=add是说访问这个login.action会找这个类里面的add方法。并返回对应的执行结果。给到对应的string对应的视图这样就可以使用一个package来定义多个action处理不同的请求了。