Struts 1实现原理之我理解

Struts是在servlet基础上设计的一种框架。下面看一段servlet的web.xml配置的配置。

servlet的web.xml

在其配置文件中可以看出WEB容器会将浏览的每一个地址交给一个对应的servlet类来处理,从而每一个路径都必须对应一个servlet类。在做servlet开发时,其servlet仅仅将路径交给相应servlet类来处理,并没有对页面提交过来的数据进行一些处理,然而在开发时往往要求对页面数据进行一些处理。这是servlet的不足之处,Struts框架弥补了servlet的不足之处。

下面是struts框架总的执行流程:

struts总流程

在做servlet开发时,配置web.xml中可以采用*号通配符的形式来配置浏览器的路径例如:<url-pattern>*.do</url-pattern>,意思是说将以.do结尾的路径都交给这个servlet类来处理。这样就明白了struts框架中.doActionServlet了,意思就是说在struts中会将所有以.do结尾的路径的请求都会交给ActionServlet(一个大的servlet类)来处理。在struts框架中每一个具体路径交给ActionServlet时,它会根据struts-config.xml的配置信息找到该路径对应的Action类。从而将这个路径交给其对应Action来处理。

web.xml配置struts信息

在struts的Action类的execute方法中有四个参数,分别是ActionMapping 类、ActionForm类、HttpRequest类、HttpResponse类。实际上这些参数是不需要手动来传值的,ActionServet传过来的。

ActionMapping类:该类实际上ActionServlet读取struts配置文件中<forward name=”***” path=”***.jsp”></forward>标签生成的一个类,它的作用是把当前Action<forward></forward>标签对中path属性中的jsp文件关联。在一个Action中可以有多个<forward><forward>标签对。从而得知ActionMapping 可以包含多个forward标签对的信息。

ActionForm类:该类实际上是ActionServlet类读取struts配置文件中的:

<form-bean></form-bean>标签对中type属性(通过反射)生成一个 formbean对象,它实际可以封装页面提交过来数据。

其余两个没有什么好讲的了。

 

看看下面一张图就会明白struts框架到底做了那些事。

struts实现细节

从这张流程图中可以看出struts是怎么做的。

struts框架中通过反射技术将页面中form提交过来数据封装成一个formbean对象传给 Action类中execute方法中的ActionForm参数(也就是前面提到的ActionForm),struts中也提供了直接通过request请求来获得参数,但是既然使用了struts框架就应该使用前面的方法来获得页面数据。

ActionForm的类中提供了valiedate()方法,它返回一个ActionError类的对象。如果该对象为空,说明校验没有出错,action不会跳转到input视图(也就是struts配置文件中<action></action>标签队中input属性,该属性的作用是校验出错跳转的页面,一般情况下也就是输入数据的页面,这下明白为什么叫input而不叫error了吧)。如果校验成功则把该参数传给对应的Action来处理。在Action处理完这些数据后,会依据要求传到不同页面。这就是一个完整的struts1的实现原理。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值