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

浙公网安备 33010602011771号