注:本文参考马士兵Struts 视屏教程编写
一、Struts 的运行机制
1.当用户在地址栏中输入了URL地址时,URL的请求会通过Http协议发送给服务器。 服务器收到请求后,查找请求的是什么Web-Application,并找到相应的Web-Application,然后交给此Web-Application去处理
2.找到对应的Web-Application》》去执行web.xml文件,查看怎么配置的,在web.xml文件中 配置了一个filter,如下图:
其中<url-pattern>/*</url-pattern>会过滤所有的URL地址,然后此地址就会被图中选中的类接收到。即org.appache.struts2.dispatcher.ng.filter.StrutsPrepateAndExecuteFilter类接收。此类是怎样处理的呢?
a.首先看NameSpace,其中NameSpace是和访问路径一一对应的,它会到struts.xml中去查,查到有一个NameSpace叫"/",然后就会在此NameSpace下去查
b.查到相应的Action的名字,如果找到了它就回去找对应的result是谁?找到了哪个/XXX.jsp然后就会把结果反馈给浏览器
为什么Struts要这么去执行?不是可以直接调用/Hello.jsp?
答:可扩展性强,灵活,把请求跟示图分开,即把请求跟最后的结果分开
二、Action中的namespace
Struts中的Package 跟Java的包是一样的作用 : 避免重名
1.namespace 必须以"/"开头 命名一般在项目开发时,跟模块名字相同 。namespace决定了action的访问路径,默认为"",可以接收所有路径的action
2.result中 凡是叫success的可以不用写,是默认的
三、在拷贝项目时
多个项目打开时,想运行相应的项目,应右键项目,选择【Properties】》》【MyEclipse】》》【Web】》》【Web-contextroot】然后再重新部署
导入时不存在此问题,但是导入时存在的问题是:
导入包的名字不正确 ,需右键包名删除,重新导入;或者右键项目重新【Build Path】》》【Configure Build Path 】》》【Libraries】》》【Add Library】》》【JRE System Library】》》【OK】