1、org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter准备和执行
2、
3、
/hello.action
访问了action,给了我们result的结果;
默认的action可以省略;
4、关联structs源代码和java docs
jar文件右键代->properies->Java Source Attachment
设置源码
D:/Program Files/struts-2.1.6/src/core/src/main/java
javadoc 文档
file:/D:/Program Files/struts-2.1.6/docs/struts2-core/apidocs/
设置xml提示:
a)window – preferences – 搜索 catalog – add
5、structs运行机制
客户端 -> url -> Http请求 -> Tomacat -> 查找对应的Webapplication -> web.xml -> filter doFilter方法->
namespace可以写为/,或者/xxx,或者/xxx/yyy,
对应的action访问路径为/index.action,/xxx/index.action,或者/xxx/yyy/index.action.
namespace最好也用模块来进行命名
package作用:避免action的重名和冲突问题;
namespace="/front",必须以斜杠开头,namespace最好也用模块来进行命名;
不写namespace,等效于namespace = "",意味着只要找到action,全都交给
namespace处理;
流程:先找对应路径下的action进行匹配,如果没有的话找namespace为空的action,
如果还没有找到action则会报错;
7、 具体视图的返回可以由用户自己定义的Action来决定;
具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容;
Action接口;
<class="com.bjsxt.struts2.front.action.Index">
struct.xml -> 找到对应的class -> 实例化对象 -> 执行对应的execute()方法
执行过程:
读到xml -> action是class -> 找到class对象(每次访问必须new一个对象) ->
当不配置class的时候,默认的class是ActionSupport。
2、
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
url-pattern约定熟成只写/*,没必要写*.action3、
<package name="default" namespace="/" extends="struts-default">
<action name= "hello">
<result>
/Hello.jsp
</result>
</action>
<span style="white-space:pre"> </span></package>
namespace="/"和访问的路径意义对应; /hello.action
访问了action,给了我们result的结果;
默认的action可以省略;
4、关联structs源代码和java docs
jar文件右键代->properies->Java Source Attachment
设置源码
D:/Program Files/struts-2.1.6/src/core/src/main/java
javadoc 文档
file:/D:/Program Files/struts-2.1.6/docs/struts2-core/apidocs/
设置xml提示:
a)window – preferences – 搜索 catalog – add
b)选择key type为URI
c)key: http://struts.apache.org/dtds/struts-2.0.dtd
d)location: 对应的dtd文件,位于struts-core包中,解压开,指定相应位置,如D:/Program Files/struts-2.1.6 \lib\struts2-core-2.1.6\struts-2.0.dtd5、structs运行机制
客户端 -> url -> Http请求 -> Tomacat -> 查找对应的Webapplication -> web.xml -> filter doFilter方法->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
->参考struct.xml -> 查找对应的namespace -> 查找对应的action -> 查找对应的result -> 反馈result -> 请求Forwad给目标文件
<package name="default" namespace="/" extends="struts-default">
<action name="index">
<result>
/index.jsp
</result>
</action>
</package>
6、namespace决定了action的访问路径,默认为"",可以接收所有路径的actionnamespace可以写为/,或者/xxx,或者/xxx/yyy,
对应的action访问路径为/index.action,/xxx/index.action,或者/xxx/yyy/index.action.
namespace最好也用模块来进行命名
<constant name="struts.devMode" value="true" />
<package name="front" extends="struts-default" namespace="/front">
<action name="index">
<result>/Namespace.jsp</result>
</action>
</package>
<package name="main" extends="struts-default" namespace="">
<action name="index">
<result>/Namespace.jsp</result>
</action>
</package>
struct.xml分析package作用:避免action的重名和冲突问题;
namespace="/front",必须以斜杠开头,namespace最好也用模块来进行命名;
不写namespace,等效于namespace = "",意味着只要找到action,全都交给
namespace处理;
流程:先找对应路径下的action进行匹配,如果没有的话找namespace为空的action,
如果还没有找到action则会报错;
7、 具体视图的返回可以由用户自己定义的Action来决定;
具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容;
<constant name="struts.devMode" value="true" />
<package name="front" extends="struts-default" namespace="/">
<action name="index" class="com.struts2.front.action.Index">
<result name="success">
/ActionIntroduction.jsp
</result>
</action>
</package>
具体Action的实现可以是一个普通的java类,里面有public String execute方法即可或者实现Action接口;
package com.bjsxt.struts2.front.action;
import com.opensymphony.xwork2.Action;
public class IndexAction1 implements Action {
@Override
public String execute() {
return "success";
}
}
配置分析:<class="com.bjsxt.struts2.front.action.Index">
struct.xml -> 找到对应的class -> 实例化对象 -> 执行对应的execute()方法
执行过程:
读到xml -> action是class -> 找到class对象(每次访问必须new一个对象) ->
当不配置class的时候,默认的class是ActionSupport。
ActionSupport源码
public String execute() throws Exception {
return SUCCESS;}
最常用的是从ActionSupport继承,好处在于可以直接使用Struts2封装好的方法
package com.struts2.front.action;
import com.opensymphony.xwork2.ActionSupport;
public class IndexAction2 extends ActionSupport {
@Override
public String execute() {
return "success";}
}
原因:ActionSupport内部已经为我们封装了许多可以直接调用的方法,在子类中可以直接使用。
以上内容是基于马士兵老师的教程整理而成的。