模拟struts架构

总体来说,MVC架构现在对于做开发的我们来说已经是达成共识了,没有谁还在用那种两层的结构来建立平台为别人提供服务了。反而从参与的项目来说,架构会远比MVC还要复杂的多。现在想对struts进行一下简单模拟,以便对此框架进一步理解。

 

这里的模拟主要用到Servlet的知识。

 

 

1、理解一下struts在我们开发中的作用:

(通常)struts有一个配置文件struts.xml,页面的请求(可能是.action的请求)首先会在web.xml文件中根据对struts的跳转配置(这个配置就是一个servlet)在struts.xml中找到相应的action,然后找到相应的类和类中相应的方法,执行完成后又根据执行返回的结果到struts.xml中找相应的Action,然后返回到对应结果的页面或做其它动作。

也就是说struts在其中起到了一个控制作用,这个控制作用正是我们想理解和模拟的。

 

2、我们在模拟时需要做的事情:

     1)在web.xml中struts需要配置的servlet应该由我们来指定,这样后面的控制工作才能由我们来进行。

     2)struts.xml文件的内容我们也可以自己定义,其中的内容不过是xml元素,我们在模拟时简单的由Properties文件进行模拟。

     3)命名方式及执行的方法也可以进行模拟,在接收到请求后到web.xml和Properties文件进行相应的配置查询,然后找到相应的类和方法(这个方法还可以叫做execute),将业务处理完成后返回一个success或fail( 这个返回结果我们也会在配置文件中配置达到整个流程尽量的像struts)。

 

这基本就是我们要达的的目的。

 

3、实践:

    1)先来看下我做好的v0.1的工程结构:

 

       顺便说一下,这里利用了myeclipse的web project。其实完全可以自己建立一个类似的目录结构来进行而完全不使用ide,不过那样的话,你需要两个jar包作支持:

       servlet-api.jar

       jsp-api.jar

       当然这个完全就是为了使用servlet所需要的。

 

      在这里你可以看到整个过程所涉及的文件及方法:

      web.xml文件,Propertier.properties文件,及两个相应的.jsp文件(用于测试)。

 

     

 

    2)在index.jsp文件中的内容:

 

      只是一个提交请求的输入框。

 

     

 

    3)result.jsp文件中的内容:

      在这里我希望取到从index.jsp中提交到后台的username。

 

     

 

 

      4)web.xml文件中的内容:

 

       在这里你需要规划好你的servlet类是哪一个,工程的代码结构会是什么样,不过这些都不重要,重要的是你的servlet-class要与你使用的servlet路径一致。这里说明一点,我们整个模拟过程,只用到一个servlet类。

 

     

 

 

 

 

      5)properties.properties文件内容:

       注意,这里的简单模拟是这样的:index要与index.jsp中from中的method相应对应,而.action只是用于在web.xml中进行请求地址匹配的。

      

 

 

 

      6) 看下ServletAction类中的内容:

 

       大概解释下:在加载web.xml时,会自动将以.action结尾的请求发送到这个类中来,这样就开始初始化init方法,在这里我们将properties.properties文件加载到内存且以键值对的方式进行保存,便于后续对相应类和跳转页面的取用。然后在service方法中,我们根据post中的的请求(index.action)在properties.properties文件中找到相应的类,然后利用java的反射机制将对应的action类进行实例化。然后就执行我们在action类中定义的execute方法。执行完成execute方法后,接收到一个返回对象,这个对象是用来进行跳转控制的类。

 

      

 

 

      7)看下IndexAction类:

 

        在这里我们模拟了struts类中默认执行的方法,只不过我们是指定执行此方法的,如果进一步修改也是可以实现这一机制的。另外注意一点,struts会继续相应的类,我们的也不例外,我们定义了自己的Actions类,这样利于我们对action类的扩展需要(及需要执行的方法)。

 

 

      

 

 

      对于继续的类比较简单,就在这里一同看下:

 

     

 

      8)最后一个需要的类,这个类用于根据execute方法执行完成后的结果进行相应的跳转控制:

 

        这里有一个两个输入参数的构造方法,这里需要参考上一步中execute的执行,如果是成功的话,自然是需要执行跳转的,如果不成功当然不能将传递的参数通过后台传递到页面去,所以定义了一个isDirect变量,会根据这个变量的变化进行相应的控制动作。

 

      

 

 

 

 

 

结论:

整个模拟的过程很简单,但真实的让我们感觉到了struts的实现原理的机制。从这里的实现来看,感受最深的是struts使用配置文件进行逻辑控制的过程。框架其实就是那么一回事儿,但真正的学习和使用时我们可以利用它的可借助于它的易用性来为我们的开发加速。

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值