一:Struts2的起源与背景
在了解Struts2之前我们先来聊聊Struts1,我们都知道在很长的一段时间内,所有的MVC框架中,Struts1他是处于一个超级大咖的地位,无论是从市场角度和使用的用户的数量这个角度而言,Struts1它占用绝对地位,对于其他的MVC框架都不能和他媲美,但是Struts1作为一款优秀的MVC框架他可以很好的实现将控制与业务逻辑相分离,但他自身也存在一定的缺陷。
1.表现层支持单一:
Struts1框架只支持JSP作为其表现层使用,而很多的Java应用,在表现层技术选择时并不一定值使用JSP一种技术,可能会用到FreeMarker,PHP之类的技术等。
2.对Servlet API的依赖:
Struts1框架是基于Model II 模式开发而成的,因此他在开发中会运用到大量的Servlet API,而且我们都知道Servlet API 是要依赖于WEB容器进行初始化的,从而他进一步对WEB容器进行依赖。
3.不利于代码重用:
在Struts1开发的代码中除了自己自定义的类外,还必须使用Struts1中的某些类,这样会带来很多的弊端,与Struts1的类耦合在一起的代码很难再其他系统中进行二次重用。
所以根据以上Struts框架在设计上的缺点,Struts2以WebWork的设计思想为核心,WebWork虽然没有Struts1名气大但是在设计上他避免了S投入他说的弊端,它更强调系统之间的松耦合,使用拦截 器来实现控制,由于不在依赖Web容器,从而解决了框架对Servlet API紧密耦合。所以Strut2是吸收了Struts1的部分优点,建立了一个兼容Struts1和WebWork的MVC框架。
二:Struts2与其优势
Struts 2是一个MVC框架,以WebWork框架的设计思想为核心,吸收了Struts 1的部分优点
Struts 2拥有更加广阔的前景,自身功能强大,还对其他框架下开发的程序提供很好的兼容性
Struts官网
下载下来后的包:
apps目录:Struts2示例应用程序
docs目录:Struts2指南、向导、API文档
lib目录:Struts 2的发行包及其依赖包
src目录:Struts 2项目源代码
三:Struts2的初体验
1.在项目中引入Struts2
必须引入的包
struts2-core.jar——Struts2的核心包
xwork-core.jar——Command模式框架,WebWork和Struts2都基于xwork
commons-logging.jar——Java日志工具类包
freemarker.jar——模板引擎,一个基于模板生成文本输出的通用工具
ognl.jar——Object-Graph Navigation Language,表达式语言,用来获取和设置Java对象属性
可选包
antlr.jar——语法分析器
aopalliance.jar——AOP联盟标准接口
classworlds.jar——class对象管理
commons-beanutils.jar——Bean处理工具类包
commons-chain.jar——流程链处理模型,Struts2处理HTTP请求处理的基础机制
commons-collections.jar——Commons项目组中的一个各种集合类和集合工具类的封装
commons-digester.jar——解析xml转换成Java对象
commons-fileupload.jar——文件上传
commons-io.jar——IO工具类封装
commons-lang.jar——Commons项目中用来处理Java基本对象方法的工具类包
commons-logging-api.jar——Java常用日志工具调用,如通过API调用Log4J
commons-validator.jar——Java对象验证框架
json-lib.jar——用来映射JSON(JavaScript Object Notiation是一种文本格式)到Java Bean的Java类库
oro.jar——文本处理工具
sslext.jar——Struts框架的一个扩展可以让开发者配置Web应用程序在http与https协议之间进行自动转换(需配置)
插件包
struts2-embeddedjsp-plugin.jar——嵌入式JSP插件,可以让你从类路径或者Jar包里面调用JSP页面(官网翻译大概是这个意思)
struts2-convention-plugin.jar——用来实现Struts2零配置的插件包,可以结合这东西实现项目REST风格应用。
struts2-json-plugin.jar——Apache提供的JSON插件包
四:第一个Struts2程序
已我们最为熟悉的登录为例
1.新建一个web项目
2.引入所需jar包
3.在web.xml配置文件中配置我们的过滤器(使用Struts2的核心,不可忘记,在后面会详解)
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name></display-name> <!-- --> <filter> <filter-name>struts2</filter-name> <!-- 使用Struts2的核心类库 --> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <!-- 拦截所有的action --> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> </web-app>