zoukankan      html  css  js  c++  java
  • action和servlet的关系

     

     

    在struts2.0中,可以通过ServletActionContext.getRequest()获取request对象。 
    在action的方法中return一个字符串,该字符串对应struts.xml中的result标签的name相同,result标签中包含的就是跳转页面, 
    其原理,我的理解是这样的: 
    一.客户端提起一个(HttpServletRequest)请求,如上文在浏览器中输入”http://localhost:8080/TestMvc/add.action” 
    二.请求被提交到一系列(主要是三层)的过滤器(Filter),如ActionContextCleanUp,FilterDispatcher等 
    三.FilterDispatcher是控制器的核心,FilterDispatcher进行初始化并启用核心doFilter 
    四.FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 
    五、ActionProxy通过(struts.xml)询问框架的配置文件,找到需要调用的Action类. 
    六、ActionProxy创建一个ActionInvocation的实例,同时ActionInvocation通过代理模式调用Action。但在调用之前ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器) 

    ActionInvocation工作原理: 
    1. ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。 
    2. 通过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。 
    3. 旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果

    可以说Struts2本质还是一个Servlet(在S1中用于整体控制的是一个Servlet;S2中是一个Filter,其实也可把它看作是Servlet),只是对Servlet进一步的封装罢了

    打个比方:做Web项目,好比建房子。Servlet好比木材,用一根根的木材搭,也可盖起房子,只是速度慢而已;

    而Struts2好比是用木材做好的一个房子大概结构,要建房子时,只需把它拿过来,再往其里面添砖加瓦,修修补补,就能很快盖好房子,这要比直接使用Servlet要快得多

    具体对比

    1.开发时间。这个的对比是struts比servlet低。因为struts有一些配置文件,如果有些不注意思,出错的机会比servlet大,不如使用jsp+servlet开发随意。
    2.代码的规范。因为jsp+servlet开发随意。规范性应差。控制语句到处有,为维护及修改带来不便。也使接手的人为解读代码带来不便。
    3.安全性。web开发最不安全的就是session的使用.servlet的开发离不开request。有了request,那也就有了session,以前我们有个组开发,乱用session,使系统的性能很着。而且有很多保密信息外漏。如果你在serlet中封装request,那你就会发现越来越象struts。而struts的值都保存在ActionForm中,所以进行简单的封装就可以使底层人员,看不到requet,又不影响取值。
    4.维护性。这个基本处于项目后期,这个的比较,就是struts远胜于servlet。只在PM控制的好。那么struts项目的代码分层很清晰。数据层,页面表示,页面控制,业务处理,这些都会分好模块。这给后期维护带来了很大的方便。因为后期的话,谁也不想引入新的BUG,如果用servlet,代码结构不清晰,很空易引入新BUG。这也是struts最强势的地方。

    struts最受人指责的地方就是前期布署,开发比较费时。所以现在的方向是便捷开发易编创护框架的开发。

  • 相关阅读:
    streamsets 集成 cratedb 测试
    streamsets k8s 部署试用
    streamsets rest api 转换 graphql
    StreamSets sdc rpc 测试
    StreamSets 相关文章
    StreamSets 多线程 Pipelines
    StreamSets SDC RPC Pipelines说明
    StreamSets 管理 SDC Edge上的pipeline
    StreamSets 部署 Pipelines 到 SDC Edge
    StreamSets 设计Edge pipeline
  • 原文地址:https://www.cnblogs.com/liangxiaofeng/p/6182780.html
Copyright © 2011-2022 走看看