struts2框架学习总结

 Struts2学习总结

  struts2在struts1的基础上发展起来的。但是实质上依旧是WebWork为核心,struts2并没有继承struts1的设计理念,而是使用的WebWork的设计理念。struts2相对许struts1有很多的不同点。

   相对于struts1中的action出现的大量的Servlet API而言,struts2的Action更像是一个java类,该控制器代码中兵并没有耦合任何Servlet API。在Action类中只需要和也面JSP页面相互传递的值的getting和setting方法和处理客户用户请求的execute方法

public class LoginAction implements Action{
   //提供相应的属性,用来封装用户请求的数据
   private String name;
   private String password;
   
   //name所需要的get set 方法啊
   .......
   //password所需要的get set 方法
   .......
   //处理用户请求
   public String execute(){
     //处理请求的逻辑
     .......
  }

}

 使用struts2的Action的代码中看不到任何的Servlet API当用户将值传递过来的时候Action并没有调用HttpServletRequest的对象获取请求参数,而是直接通过Action中的成员属性直接调用。这两个数据就是由Struts2的拦截器进行的初始化,以用户请求进行赋值。

拦截器和过滤器的区别

  说到拦截器就不得不讲一下拦截器和过滤器的区别了

1、拦截器是基于java的反射机制的,而过滤器是基于函数回调。

2、拦截器不依赖与servlet容器,过滤器依赖与servlet容器。

3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。

5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

6、执行顺序 :过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后


Struts2的配置

对于使用Struts2的框架,首先要先把Strut2所需的jar包导入到程序内
(freemarker的jar包必须存在才能使用Struts2的框架)
然后在web.xml文件中配置Struts2的过滤器
 
<filter>
  	<filter-name>Struts2</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>Struts2</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
配置一个Struts2全属性的 struts.properties 文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="struts-default">
		<action name="请求路径" class="处理请求的Action类" method="处理请求的方法默认为execute方法">
			<result name="相对应的字符串" type="转向资源类型">
				处理完请求跳转到额页面
			</result>		
		</action>
    </package>
    <!-- Add packages here -->
</struts>

    在struts.xml中定义一个Action,不仅要定义Action的实现类,而且还要定义Action的处理结果,指定了多个<result>元素并且每个元素都对应一个视图资源。
  

Struts2的控制器

 在struts2的框架中,最为核心的就是struts2的控制器,事实上,在所有的基于MVC的框架技术中,都是以控制器最为核心的。在Struts2中,控制器由两部分组成:一个是在web.xml中配置的StrutsPrepareAndExecuteFilter 和业务逻辑中的Action。
  在struts2中,业务逻辑控制器Action是用户自定义的,但是在Struts2应用中,用户定义的业务控制器并不会自己去执行,而是通过Action的代理类来完成调用的,所以,在Struts2中,Action代理类就是以用户自定义的业务控制器Action类为目标创建的。

Struts2的执行流程和原理
在struts2中是通过拦截器来处理用户的请求的,从而允许用户使用的业务逻辑控制器和Servlet分离,在执行处理请求的时候以用户的业务逻辑控制器为目标,创建一个控制器代理,控制器代理回调业务控制器中的execute方法来处理用户请求
  struts2框架的处理流程如下:
(1)浏览器发送请求
(2)核心处理器StrusPrepareAndExecuteFilter 根据请求决定调用合适的Action
(3)Struts2的拦截器链自动对请求进行相关应用的拦截 如文件的上传下载功能
(4)回调Action中的execute方法,该方法先获取用户的请求参数,然后执行某种数据库的操作,既可以将数据保存到数据库,也可以从数据库中查询数据,实际上Action只是一个控制器,它会调用业务逻辑组件来处理用户请求。
(5)Action的execute方法将处理的结果存入Stack Context中,并且返回一个字符串;核心控制器StrusPrepareAndExecuteFilter 将根据返回的额字符串跳转到指定的视图资源,读取Stack Context中的信息,并且在浏览器生成响应数据

   StrusPrepareAndExecuteFilter 控制器作为一个过滤器(filter)运行在程序中,在Struts2中,它主要是负责拦截所有用户的请求,当用户的请求到达时,StrusPrepareAndExecuteFilter会过滤用户的请求,所有的请求会交给struts2框架处理。当struts2框架得到请求后,会根据请求的名字决定调用那个业务逻辑组件。struts2中处理用户的Action全部都被定义在struts.xml文件中
  在Struts2中处理用户请求的Action实例并不是用户实现的业务控制器,而是Action代理Actionproxy,因为在Struts2中实现的业务逻辑控制器并没和任何Servlet API耦合,所以Struts2本身并不能处理用户的请求。是这一系列的拦截器中包含有负责将HttoServleRequest请求中的请求参数解析出来的拦截器,并且把解析参数传入Action中,并回调Action的execute方法来处理用户请求。


Struts2的拦截器

    拦截器是Struts2 MVC框架的重要组成部分,在struts2中,我们需要拦截器是只需要在配置文件中进行相关的配置即可;如果不需要某个拦截器的话,在配置文件中取消该拦截器配置即可。无论使用那个拦截器,对整个struts2不会产生任何影响

  因为Struts2的拦截器是动态配置的,所以开发者可以非常方便的扩充struts2的拦截器,只需要提供拦截器类,放到struts.xml文件中即可

  Struts2的拦截器体系是一种AOP面向切面编程的设计方式,它允许开发人员用简单的开发方式进行AOP方式的开发。Struts2的拦截器可以动态拦截Action调用的对象,并提供一个机制,开发者可以定义一个Action执行前后的代码。同时拦截器也提供一种可以提取Action中可重用代码的方式。


最为一个初学者,掌握的知识不够全面,如果有错误的地方,希望能够提出。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值