一、struts2概述

1.1 什么是struts2?

 在介绍Struts2之前,先来认识一下Struts1。Struts1是最早的基于MVC模式的轻量级web框架,他能够合理的划分代码结构,并包含了验证框架、国际化框架等多种实用工具框架。但随着技术的进步,Struts1的局限性也越来越多的暴露出来。为了符合更加灵活、高效的开发需求,Struts2框架应用而生。

  Struts2是Struts1的下一代产品,是在Struts1和WebWork技术基础上进行合并后的全新框架。虽然Struts1和Struts2名字类似,但其设计思想却有很大不同。实质上,Struts2是以WebWork为核心,采用拦截器机制来处理用户的请求。这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以从另一方面可以理解为Struts2是WebWork的更新产品
  Struts拥有优良的设计和功能,其优势具体如下:

  1. 项目开源,使用及扩展方便,天生优势。
  2. 提供Exception处理机制。
  3. Result方式的页面导航,通过Result标签很方便的实现重定向和页面跳转。
  4. 通过简单、集中的配置来调度业务类,使得配置和修改都非常容易。
  5. 提供简单、统一的表达式语言来访问所有可访问的数据。
  6. 提供标准、强大的验证框架和国际化框架。
  7. 提供强大的、可以有效减少页面代码的标签。
  8. 提供良好的ajax支持。
  9. 拥有简单的插件,只需放入相应的jar包,任何人都可以扩展Struts2框架,比如自定义拦截器、自定义结果类型、自定义标签等,为Structs2定制需要的功能,不需要什么特殊配置,并且可以发布给其他人使用。
  10. 拥有智能的默认设置,不需要另外进行繁琐的设置。使得默认设置就可以完成大多数项目程序开发所需要的功能。

1.2 前端控制器模式

  Web层框架(Struts1、Struts2、Webwork、SpringMVC)都有一个特点,就是基于前端控制器模式实现的。

  什么是前端控制器模式呢?我们来看下图,在传统方式的开发,有一次请求就会对应一个Servlet。这样会导致出现很多Servlet。而Struts2将所有的请求都先经过一个前端控制器,在前端控制器中实现框架的部分功能,剩下具体操作要提交到具体的Action中。所有的请求都会经过前端控制器,那用什么来实现前端控制器呢?过滤器是最好的一个实现方式,因为需要所有的请求都可以被过滤器拦截,然后在过滤器中实现部分的功能。所以Struts2的前端控制器也是由过滤器实现的。

    

    

二、Struts2入门案例

2.1 下载Struts2的开发包

  Struts的官网:https://struts.apache.org/

  解压开发包:

    

2.2 创建一个web工程并导入jar包

  首先我们需要创建一个web工程,引入相关的jar包文件。那么该引入哪些jar包呢?将struts-2.3.24框架目录中的lib文件夹打开,得到Struts2开发中可能y用到的所有jar包(共107个)。但是在实际开发中,我们根本不用引入那么多的jar包。

  要进行struts2的基本开发,可以参考struts2-2.3.24中的apps下的一些示例代码,其中struts2-blank.war是一个struts2的空的工程。我们只需要将struts2-blank.war解压后进入到WEB-INF下的lib查看:

    

  这些包就是struts2的基本开发包了。

  

  从表中可以看出,此版本的Struts2项目所依赖的基础jar包共13个。Struts2根据版本的不同所依赖的基础jar包可能不完全相同,不过基本上变化不大。

  需要注意的是,通常使用Struts2的Web项目并不需要利用到Struts2的全部jar包,因此没有必要一次将struts2的lib目录下的全部jar包全部复制到web项目的WEB-INF/lib路径下,而是根据需要,再添加响应的jar包。

2.3 编写一个Action类

public class HelloAction {
public String hello(){
System.out.println("hello world");
return "success";
}
}

  Action类编写好了以后,Struts2框架如何识别它就是一个Action呢?我们需要对Action类进行配置。

2.4 在struts.xml中配置Action

  我们观察apps中的示例代码,在WEB-INF的classes中,有一个名称为struts.xml的文件,这就是struts2的配置文件。

  在开发中需要将struts.xml文件引入到工程的src下,因为src下的内容发布到web服务器中就是WEB-INF下的classes,将原有的内容删掉,然后配置自己编写的Action类:

<?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>
<!-- 配置一个包:package -->
<package name="demo1" namespace="/" extends="struts-default">
<!-- 配置Action -->
<action name="helloAction" class="cn.itcast.struts2.action.HelloAction" method="hello">
<!-- 配置结果页面的跳转 -->
<result name="success">/jsp/test.jsp</result>
</action>
</package>
</struts>

  Action类配置好了后,现在是否可以执行呢?其实还不行,之前我们介绍过,web层的框架都有一个特点,就是基于前端控制器的模式,这个前端控制器是由过滤器实现的,所有我们需要配置Struts2的核心过滤器,这个过滤器的名称是StrutsPrepareAndExecuteFilter。

2.5 在web.xml中配置核心过滤器

  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>

2.6 测试

  

struts2学习笔记(一)—— struts2介绍及入门程序的更多相关文章

  1. struts2学习笔记--使用struts2插件实现ajax处理(返回json数据)

    贴一个简单的例子,通过jquery的post调用action,定义一个对象User,有name和age属性,实例化几个对象,以json的格式返回到jsp,在前台页面显示出来,模拟用户列表. 导入相关j ...

  2. struts2学习笔记之六:struts2的Action访问ServletAPI的几种方式

    方法一:通过ActionContext访问SerlvetAPI,这种方式没有侵入性 Action类部分代码 import com.opensymphony.xwork2.ActionContext; ...

  3. Struts2学习笔记(一):Struts2开发环境的配置

    一.Struts2应用所需的jar文件. 开发struts2应用需要依赖的jar文件在解压目录下的lib文件夹里面.开发struts2程序最少需要的jar文件为:struts2-core-2.xx.j ...

  4. struts2学习笔记2 -struts2的开发步骤和工作原理

    struts2的开发步骤: 1.先定义一个能发送请求的页面,可以是链接,也可以是表单(form) 2.开发action类,struts2对action并没有过多的要求,只要求: a 推荐实现actio ...

  5. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  6. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

  7. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  8. cocos2d-x入门学习笔记,主要介绍cocos2d-x的基本结构,并且介绍引擎自带的示例

    cocos2d-x 3.0 制作横版格斗游戏 http://philon.cn/post/cocos2d-x-3.0-zhi-zuo-heng-ban-ge-dou-you-xi http://blo ...

  9. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  10. jQuery学习笔记(一):入门

      jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操 ...

随机推荐

  1. 使用Fuel安装openstack

    一.前言 Fuel是OpenStack的开源部署和管理工具.作为OpenStack社区的开发贡献者,它为OpenStack.OpenStack相关社区项目以及OpenStack插件的部署和管理提供了直 ...

  2. 如何在局域网架设FTP(特别简单方便)

    https://files.cnblogs.com/files/wlphp/FTPserver.zip 在我上传的博客园文件下载下来 启动服务,设置账号密码(注意一定要关闭防火墙)

  3. IDEA maven打包时跳过测试

    配置这个install -Dmaven.test.skip=true, 可以跳过business项目本地启动自动跑测试用例

  4. Unix基本系统数据类型和stat结构体

    Unix基本系统数据类型 历史上,某些UNIX变量已与某些C数据类型联系在一起,例如,历史上主.次设备号存放在一个1 6位的短整型中, 8位表示主设备号,另外8位表示次设备号.但是,很多较大的系统需要 ...

  5. c语言实践:RS信号报告

    题目: 无线电台的RS制信号报告是由三两个部分组成的: R(Readability) 信号可辨度即清晰度. S(Strength)    信号强度即大小. 其中R位于报告第一位,共分5级,用1—5数字 ...

  6. PHP防止木马攻击的措施

    防止跳出web目录 只允许你的PHP脚本在web目录里操作,针对Apache,还可以修改httpd.conf文件限制PHP操作路径. 例如:php_admin_value  open_basedir( ...

  7. UVa 10245 The Closest Pair Problem (分治)

    题意:给定 n 个点,求最近两个点的距离. 析:直接求肯定要超时的,利用分治法,先把点分成两大类,答案要么在左边,要么在右边,要么一个点在左边一个点在右边,然后在左边或右边的好求,那么对于一个在左边一 ...

  8. Sql 不确定列 行转列操作

    做项目时,用到了汇总统计的行转列,且 表结构: 具体存储过程脚本如下: -- =============================================-- Author:  -- C ...

  9. 初学python - 常见函数使用

    *** 读入两个整数 a,b=eval(input()) ***range()函数 创建列表 :range( 1, 11,2) - 产生 [1,11) 相差为2数,2为步长 ***print()函数 ...

  10. [Essay]看《Re:从零开始的异世界生活》的一些感想

    人生不能重来,但动漫可以. -- 故事背景 <介绍背景> 男主486通过不断重来,而改变了剧情的发展.整个动漫就像RPG游戏一般,只看了一遍没有完全理解,但后来再看萌娘百科才把整个剧情里所 ...