zoukankan      html  css  js  c++  java
  • struts actionservlet如何拦截请求

    1.接受客户端请求
     
    2、 调用M层模型组件执行相应的业务逻辑。
     
    3、 获取M层业务逻辑的处理结果
     
    4、 根据处理结果选择合适的视图呈现给客户端。
     
    Contrler层核心控制组件是:ActionServlet,继承javax.Servlet.Http.HttpServlet,并实现了init(),doGet()、doPost()、destroy()等Servlet生命周期所用到的方法。还添加了一个process(),它本身不复杂,但它会调用其他的复杂方法。
     
       该框架以 ActionServlet作为核心控制器,整个应用由客户端请求驱动。当客户端向Web应用发送请求时,请求将被Struts 1的核心控制器 ActionServlet 拦截,ActionServlet根据请求决定是否需要调用业务逻辑控制器处理用户请求,若需要,ActionServlet将该请求发送给对应的业务逻辑控制器,业务逻辑控制器调用模型来处理用户请求,当处理完成后,其处理结果通过jsp呈现给用户。
     
    ActionServlet接收到来自Servlet容器的客户请求时,具体处理步骤:
     
    1、根据浏览器是post还是get请求调用doPost()、doGet()方法,在其中调用ActionServlet的process()方法。
     
    2、Process()获取RequestProcessor对象,调用RequestProcessor对象的process()方法
     
    3、Process()读取struts-config.xml,在其中查找<action>子元素,查找的条件是:用户请求的URI与action元素的path属性值一样,找到后确定name属性,根据name找到<form-bean>元素,再根据action元素的name匹配值找到相应的ActionForm bean。
     
    4、 调用ActionForm bean的setter方法填充FormBean的属性,然后调用FormBean的validate()方法,对表单数据的有效性进行验证。
     
    5、 RequestProcessor的process()方法根据3中找到的<action>中的type属性寻找Action bean对象(有则使用,无则创建),然后将FormBean对象,封装的请求对象等信息发给找到的Action对象,Action bean调用自己的execute()方法处理。
     
    6、Action bean的execute()方法执行完璧后,返回一个ActionForward对象,又回到RequestProcessor对象的process()方法,process方法将根据ActionForward请求重新定向到指定的页面。
     
    2.       Struts1的不足
     
    (1)支持的表现技术单一。只支持jsp。
     
    (2)与Servlet API 严重耦合,难于测试。在Struts1的逻辑控制器内充满了大量的servlet API,尤其是HttpServletRequest 和 HttpServletResponse 这两个参数,需要通过web容器来实例化,非常难于测试。
     
    (3)代码严重依赖Servlet API,属于代码入侵式设计。在处理方法中,包含大量的Struts 1 API,如: ActionMapping、ActionForm、ActionForward等,一旦系统重构,离开struts1时,这些代码将毫无用处。
     
    3.       webwork简介
     
    它主要包括两部:核心控制器ServletDispatcher,由框架提供;业务逻辑控制器,由程序员控制。与struts1相比,他完全从于servlet分离,更容易测试。处理流程:当用户向web应用发送一个请求时,该请求经过webwork过滤器过滤,由核心控制器拦截,若请求需要webwork的业务逻辑控制器处理,该控制器则调用Action映射器,该映射器将用户请求转发到对应的业务逻辑控制器。主要,这里的业务逻辑控制器并不是开发者实现的控制器,而是webwork创建的控制器代理。
     
    在创建控制器代理时,webwork需要得到开发者定义的xwork.xml配置文件,控制器代理以用户实现的控制器为目标,以拦截器链中的拦截器作为处理。
     
    当开发者自己的控制器处理完请求后,返回的只是普通的字符串,该字符串对应到指定的视图资源。指定的视图资源经过拦截器链的处理后,生成对客户端的相应输出。
     
    它的优势:
     
    1)      Action没有与Servlet API 耦合,易于测试;
     
    2)      )Action无需与WebWork耦合,代码重用率高;
     
    3)      支持更多的表现层技术,有更好的适应性。
     
    4.struts2简介
     
    从总体上讲,struts2是以webwork思想为核心,同样适用拦截器做为处理,以用户的业务逻辑控制器做为目标,创建一个控制器代理。控制器代理负责处理用户请求,处理请求时调用业务逻辑控制器的execute方法。具体处理流程如下:
     
    (1)浏览器发送请求。
     
    (2)核心控制器FilterDispatcher根据请求决定调用合适的Action。
     
    (3)webwork的拦截器链自动对请求应用通用功能。
     
    (4)回调业务逻辑控制器Action的execute方法,该方法先获取用户请求参数,然后调用模型层进行数据处理。
     
    (5)处理完后返回浏览器。
     
    5.struts1和strut2对比
     
    (1)在实现类方面的对比:struts1继承action累,struts2可以实现一个接口。
     
    (2)线程模式方面对比:struts1是单例模式,要特别注意线程安全;struts2每一个请求都产生一个实例,不存在线程安全问题。
     
    (3)servlet依赖程度对比:struts1的Action依赖于servlet API,struts2与servlet完全分离,更易测试。
     
    (4)封装请求参数的对比:struts1必须使用一个actionForm来封装请求参数;struts2直接使用Action属性来封装用户请求参数。
     
    6.开发流程:
     
    1.       创建web应用。
     
    2.       增加struts2功能。
     
    1) 在web.xml中配置struts2核心Filter;
     
    2) 将相关jar包复制到web-info/lib下;
     
    3) 在web.xml/classes下增加struts.xml配置文件。
     
    3.       实现控制器类。
     
    控制器类是一个包含execute方法的pojo类,其属性与jsp表单属性对应。
     
    struts2的拦截机制负责解析用户请求中的参数,并将这些参数赋值给Action的属性。
     
    4.       配置Action。
     
    将业务逻辑控制器Action配置到struts.xml中,该配置文件还定义了处理
     
    结果与视图资源的映射关系。
     
    5.       增加视图资源,如error.jsp、welcome.jsp等。
     
    =======================================
    1.jsp是技术,struts、Spring、Hibernate是框架
     
    2.所谓框架也就是说别人提供一些类和接口供你使用。
     
    3.Struts对于Web项目提供控制,但是Struts对系统有一定的侵入性,表现在它的Action上。
     
    4.Hibernate是ORM框架,由于原先采用连接池,系统不便于迁移,此技术解决了数据层的问题。这样你可以专心的关注业务。
     
    5.Spring是一轻量级的框架,侵入性小,解决了Struts框架的缺点,等等...
  • 相关阅读:
    python爬虫面试总结
    Android 开发之避免被第三方使用代理抓包
    类的惰性属性
    [转载]Python: 你不知道的 super
    转 白话解析:一致性哈希算法 consistent hashing
    转 appium解决每次运行都需要安装Unlock以及AppiumSetting的问题
    233
    windows中Appium-desktop配合夜神模拟器的使用
    CentOS 6.4 添加永久静态路由所有方法汇总(原创)
    牛逼的lsof命令!!!
  • 原文地址:https://www.cnblogs.com/huapox/p/3251487.html
Copyright © 2011-2022 走看看