Struts2的概述:

  Struts2是应用在Javaee三层结构中的web层。Struts2是在Struts1和webwork的基础之上发展的全新的框架。在没有使用Struts2之前,进行web层的操作主要是通过Servlrt类来进行实现,而每一个功能对应一个Servlet。这种方式实现有一个不好的地方,就是如果在你的功能有很多的时候,那么对应的Servlet也相对会很多,这样对程序的后期维护是很不好的。在Javaee阶段,传智播客老师教了一种解决的方案就是对HttpServlet进行再次的封装为一个BaseServlet(通过反射来进行封装:主要是通过在页面传参method=...,在BaseServlet中获取到method的参数,在通过反射来调用对应的方法,而我们只需要在写的Servlet中继承封装好的BaseServlet的话,就可以在一个Servlet中写多个方法),这种方式实现相对于一个功能一个Servlet而言就稍微的高端一点,同样这种方式还是有不足的地方,例如,在每次写Servlet的时候,均需要继承自封装好的BaseServlet。这时候,有一个更加好的方式实现,就是Struts2框架。下面通过图片描述Strut2和Servlet的区别:

  Struts2:

  

  Servlet:

  

Struts2的目录结构:

使用Struts2的步骤:

  1. 创建Web项目,导入jar包

    对于Struts2的jar包,并不是将lib目录下的所有jar包导入,可以到apps文件夹下找到对应的示例程序,选择这个即可,用压缩软件打开,将其中的jar包复制到web项目下。如下图:

                  

  2. 创建Action

    在以前的Servlet中,每次访问Servlet时候,均会执行service()方法,而在使用Struts2的时候,创建Action类,每次访问的Action的时候,执行的是Struts2底层封装的execute()方法。

  

  3.  配置Action类的访问路径,也就是Struts的核心配置文件。

    在以前的Servlet中,如果要找到对应的Servlet,需要对Servlet进行路径的配置。同样对于Struts2的Action类,也需要进行Action的配置。Struts2的配置需要在Struts2的核心配置文件中进行配置,因此首先需要创建Struts2的核心配置文件:,对于这个struts2的核心配置文件和Hibernate的核心配置文件一样,有两个要求:第一要求struts2的核心配置文件的位置,必须在src根目录下,第二要求struts2的配置文件的文件名必须为struts.xml。如下图:

  

  由于一般的xml文件,均具有约束文件,所以在创建struts.xml文件的时候,还需要给struts.xml文件引入约束。struts的详细配置,在下面介绍;引入约束如下:

 <!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

  

  4. 配置过滤器

    在此博文开篇的部分图中,看到,对于Struts2的执行流程是必须先经过过滤器的。因此要使Struts2正确的运行,那么还需要在web.xml文件中配置Struts2的过滤器,此过滤器的配置,可以在Struts2提供的示例程序中找到。具体配置代码如下(只需要将下面的配置代码,放到项目的web.xml文件中即可):

     <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>
StrutsPrepareAndExecuteFilter类是Struts2的过滤器类,他实现了Filter接口

Struts2的执行过程:

最新文章

  1. [译]AngularJS中DOM操作
  2. STL(multiset) UVA 11020 Efficient Solutions
  3. 用node开发repl应用
  4. easyUI框架之学习记录汇总
  5. Sqlcompletefree
  6. node.js http.get 和http.post 数据
  7. Android面试题整理【转载】
  8. Java:集合框架的工具类
  9. application/xml和text/xml的区别
  10. jQuery Mobile里xxx怎么用呀?(控件篇)
  11. java基础(二十)IO流(三)
  12. 浏览器的Storage做缓存需要注意的地方
  13. Gridview 多重表头 (一)
  14. &lt;EditText /&gt; This text field does not specify an inputType or a hint
  15. MATLAB常用函数(不定时更新)
  16. python对象的多重继承
  17. 关于金蝶k3 wise供应生门户登陆界面屏蔽业务账套多余功能模块设置方法
  18. 时间选择器(timepicker)
  19. Zabbix Agent 源码编译安装
  20. SpringBoot注解验证参数

热门文章

  1. linux c++下遍历文件
  2. 费用流+SPFA ||【模板】最小费用最大流
  3. Python(1) 整型与浮动型
  4. 洛谷P3768 简单的数学题 莫比乌斯反演+杜教筛
  5. 【LuoguP4916】魔力环
  6. Python---进阶---文件操作---比较文件不同
  7. day3 ord,chr,random,string
  8. 【leetcode】525. Contiguous Array
  9. 微信小程序-wxml-空格
  10. DOS命令里面的EQ、NE、GT、LT、GE、LE分别是什么意思