Struts2框架学习(一)

Struts2是Apache发行的开源框架,是一个表现层web(MVC)框架。

Struts1:

Struts1也是apache开发的一套MVC框架,在2005年之前非常流行,其核心控制器是一个servlet,随着使用者的增多,弊端开始出现。

Struts2:

在以前有一个设计超前的框架XWork,后来推出XWork1和WebWork2,Sruts2就是apache和OpenSymphony组织合并开发出来。Struts2包含WebWork2的核心以及Struts1一些特性和功能,除此之外,与Struts1没有任何关系。

开发环境搭建

下载Struts2地址:http://struts.apache.org

下载解压后目录结构如下

Struts2框架学习(一)

 apps 官方提供的案例Demo

docs 官方提供的文档

lib 官方提供的jar包

src 源码

dtd xml约束文件

对于首个Struts2项目jar包导入,可以进入apps目录下,找到struts2-blank.war项目,这是一个官方提供的Struts2空白项目,解压后(可以将项目放到tomcat webapps目录下,启动tomcat,tomcat就会将此项目解压),在WEB-INF下的lib目录下就是Struts2项目所需最基本的jar包,对于首个项目创建只需导入这些即可

Struts2框架学习(一)

 jar包介绍

Struts2框架学习(一)

 将struts2-blank目录下的classes目录下的struts.xml添加进自己创建web项目src目录中然后删除stuts标签所有内容,所需内容后续配置

在web.xml文件中需要配置struts核心过滤器

Struts2框架学习(一)

 配置过滤器目的是用于拦截请求,由Struts的规则去处理请求,而不是以前servlet处理

Struts配置Action

在struts中配置package和action

Struts2框架学习(一)

写一个HelloAction类,需要写个hello方法

Struts2框架学习(一)

 

在WebContent目录下新建一个demo1目录并在目录下新建success.jsp文件

Struts2框架学习(一)

 

运行项目得到结果

Struts2框架学习(一)

 首个项目搭建成功

为了在struts配置文件中能提示标签信息,需要将struts约束文件导入到eclipse中

首先复制http://struts.apache.org/dtds/struts-2.3.dtd,然后在eclipse中点击window,再选择preferences,然后找到XML CATALOG,点击Add进行添加,配置如下

Struts2框架学习(一)

Struts2框架学习(一)

 配置完成保存后,在struts配置文件中写struts标签时会有提示

Struts2架构图

Struts2框架学习(一)

 

  1. 浏览器发送请求,经过一些列的过滤器后,到达核心过滤器StrutsPrepareAndExecuteFilter
  2. StrutsPrepareAndExecuteFilter通过ActionMapper判断当前的请求是否需要某个Action处理,如果不需要,则走原来流程,如果需要则把请求交给ActionProxy来处理
  3. ActionProxy通过ConfigurationManager询问框架配置文件(struts.xml),找到对应Action类
  4. 创建ActionInvocation实例,来调用Action的对应方法获取结果集name,在调用之前会执行相关拦截器
  5. 通过结果集的name找到对应的结果集来对浏览器进行响应

struts2有很多配置文件,当应用被tomcat加载的时候,struts2的配置文件就已经被加载过了

文件加载顺序

Struts2框架学习(一)

Struts2框架学习(一)

 

Struts2框架学习(一)

修改struts访问后缀

第一种方式添加如下一行就会修改访问路径后缀,因为struts加载配置文件是按顺序的,后加载的配置文件会覆盖前面文件相同的配置信息

Struts2框架学习(一)

 第二种方式在src目录下创建一个struts.properties

在这个文件添加如下一行

struts.action.extension=htm

同样会覆盖struts.xml文件的配置

第三种配置方式,在web.xml文件中为struts2核心控制配置初始化参数

Struts2框架学习(一)

在struts.xml配置开发者模式为true

Struts2框架学习(一)

开发者模式好处是有更详细的错误信息