当在前台浏览器端点击访问一个路径时,
例如http://localhost:8080/grassinfo-web/system/user!info.action,(/sysytem是手动在UserAction类的前面加的namespace)请求通过HTTP协议提交给服务器端,服务器端会首先根据web.xml的配置由struts2的拦截器对该路径进行过滤
<filter>
<filter-name>struts-prepare</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-prepare</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts-execute</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-execute</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
Struts2的拦截器会默认扫描src下所有带有web,action字段的包(也可以在struts的配置里面自行配置struts2要扫描的包名含有哪些字段的包)以及这些包的子包并找到UserAction类,*.web.*,*.action.*,这里web或者action的点后面的部分即是默认的namespace(也可以自行定义namespace),然后执行UserAction下的input方法(public String input(){return”input”}),并根据返回的值来确定返回页面,返回值为input则返回的页面为user_input.ftl页面或者user_input.html页面或者user_input.jsp页面或者user_input.vm页面,若返回值为“hello”,则返回user_hello.ftl页面或者user_hello.html页面或者user_hello.jsp页面或者user_hello.vm页面。
注意:访问user!input.action会访问UserAction下的input方法
访问 user!index.action会访问UserAction下的index方法
而访问user_input.action则会访问UserInputAction类的默认的excute方法
访问user_input!info.action则会访问UserInputAction类的默认的info方法
当前台的访问路径是
http://localhost:8080/grassinfo-web/system/user.action,则默认执行UserAction下面的excute方法,如果返回值return为Success,则默认的返回页面就是user.ftl或者user.html或者user.jsp或者user.vm,若返回值是“haha”,
则返回页面就是user_haha.ftl或者user_haha.html或者user_haha.jsp或者user_haha.vm