Struts学习---原理解析(一)---路径解析+action解析

Action name 这里对应的是访问时的路径,前面是项目名称

 

Devmode = develop mode 开发者模式,value为true的时候表示处于开发者模式,每次修改strut.xml文件会自动更新配置,不用重新发布项目

 

当我们在myeclipse 中想看某个类的具体api时,按f1键即可,这样是查看java.doc文档(帮助文档)

 

打开preference窗口搜索“XML.catalog”可以自己手动添加 dtd 文件(xml约束文件,又称语法文件),有了这个文件,那么xml文件报错的话就会提示是哪里的语法出问题,输入的时候也会有提示

 

 

 

 

 

!!!!重点来了

详细讲下运行机制:

用户输入url地址

 

首先这个请求会发送到tomcat(服务器),然后tomcat解析请求,依次解析这个url,解析到时就知道你要访问的是我tomcat下的这个webApplication,那么这时候就把控制权转交给这个webApplication,

这个webApplication接到这个请求,首先是查看自己的web.xml文件,发现里面有个filter

 

 

即 url过滤器,他的路径匹配是这个,也就是这句话后面接什么东西都会进入到这个过滤器里面来处理,因为*号表示任何东西,那么解析到这个字符串时就会进入到这个过滤器里面处理,这个过滤器的本质是一个java类(一个处理应用程序),即,也就是说现在的控制权转交给我们的struts类来处理

 

那么struts他是怎么处理呢,首先是读取自己的struts.xml文件,查找namespace,找到对应“/”的namespace(他其实是与url路径一一对应,下面会有详解),

然后再查找下面是否有叫”hell”的action,没有就报错,有的话就查找这个action的result,返回result的内容给浏览器,也就是/Hello.jsp(意思就是这个文件放在webRoot下面)

 

 

Package的作用和java的package一样,区分同名的action

至于namespace

 

 

 

 

你看,请求的是/front,那么你的struts.xml文件里面就一定要有个namespace叫“/front”的package

如果namespace不写,那么表示namespace为空,那么就会出现下面的结果

 

 

无论你的index前面有什么东西,结果都会返回,也就是说这个package囊括了其他package处理不了的请求

接着刚才的struts类的控制

 

Struts类会根据struts.xml文件进行操作,当他操作到action时,比如用户要访问的action是这个

 

 

看到没,action他也有自己对应的处理得类,这个类拿的是完整的工程项目名,是项目里面的一个类,这个类只要满足

“有execute方法并且返回的是string类型”就可以作为一个action

 

那么访问action时到底发生什么事情呢,struts类会new一个要访问的action类对象出来(可以防止多线程访问问题) ,然后调用 execute方法,,比如放回”success”的字符串,那么就会返回 name=”success”的result

 

如果没有这个result就会报错

但是为了方便,我们一般自定义的action类来继承ActionSupport类,重写他的方法

 

 

ActionSupport是struts默认的action类,当我们不给action指定类时,就会默认给他指定ActionSupport

 

posted @ 2016-07-13 13:31  马西星  阅读(911)  评论(0)    收藏  举报