根据浏览器当中的 url地址
url地址的请求通过http协议,发送给 tomcat
tomcat根据请求地址,找到相对应的 webapps (图中的webapps为struts1)
然后读取struts1所对应的 web.xml 文件
找到web.xml中有一个 filter ,它会过滤所有的url地址(/*)
访问地址 /demo/hell_ss 被filter中的class接收:
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
filter找到对应的 struts.xml 文件
然后根据请求路径找对对应的 namespace
地址中的namespace为 “/demo”
然后再找,看 “/demo” 下面是否有名字为 hell_ss 的 action
如果有,找到对应 action 中的 result 是谁
找到 /Hello.jsp
将 Hello.jsp 的 结果反馈给 浏览器
流程图:
action + 配 class
filter找到这个action的时候,回new一个IndexAction3类对象,然后调用对象的execute方法,方法返回success
具体视图的返回可以由用户自己定义的Action来决定
具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容
具体Action的实现可以是一个普通的java类,里面有public String execute方法即可
或者实现Action接口
不过最常用的是从ActionSupport继承,好处在于可以直接使用Struts2封装好的方法
struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
用注解
和 base标签
现在的 href=”path/path” ,实际上是一个绝对路径:
“ http://localhost:8080/struts2/ ” + ” path/path”
访问的即是:struts2项目下的 namespace为“path”的,下面的“path”的 “action”