一、什么是Struts?
Struts是基于MVC的轻量级框架。
下面对这句话作出解释
————基于MVC:实现了MVC
————轻量级:相对于重量级框架(EJB)而言,Struts是轻量级的,量级与侵入性成正比。
————框架:代码的主体结构,能够为我们提供最基础的代码,可以减少我们的代码量。
二、为什么要使用Struts?
从Jsp的发展过程来看,jsp经历了model1、model2两个阶段的发展,而且每个阶段都有一些不足,model1中jsp充当控制器和业务视图展示的作用,导致jsp中的代码很复杂,难以维护;model2有了一定的改进,jsp单独负责业务展示功能,servlet充当控制器的左右,虽然层次明显了,但是控制层的实现需要写大量的代码,实现较复杂,维护起来也有一定的难度。
从struts的优点来看,strtus是基于MVC实现的轻量级框架,因为实现了MVC,所以它具有MVC的一些优点,比如层次分明、高可重用性,struts在健壮性、易用性、扩展性、侵入性等方面都有良好表现,更重要的是它提供了一个非常好的控制器和一套好用的标签库,也就是说它在控制层和视图层表现都很出色;其次,它是一个开源项目,而且可以和其他的技术框架能够很好的融合。
三、Struts2和struts1的区别和联系?
Struts2和struts1的区别很大,不能简单理解为struts1的升级版,struts2是以xwork为核心,可以理解为webwork的升级版。
四、Struts2工作流程
struts2的工作流程如下:
- 客户端浏览器发出HTTP请求;
- 根据web.xml配置,该请求被FilterDispatcher接收;
- 根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton;
- Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证;
- Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面;
返回HTTP响应到客户端浏览器。
五、如何使用Struts2?
1.使用struts2的步骤:
①创建一个Web Project工程;
②导入Struts2的核心包[struts2-jar];
③配置前端控制器:struts2提供了默认的前端控制器,简单配置即可使用,struts2使用filter充当前端控制器,控制器组件为org.apache.struts2.dispatcher. ng.filter.StrutsPrepareAndExecuteFilter
;
④配置前端控制器所依赖的配置文件struts.xml
。
2.示例Demo
创建工程和导包不再赘述,上述步骤中的配置前端控制器是在web.xml文件中配置的,具体的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!--配置前端 控制器,从而通过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>
</web-app>
前端控制器所依赖的配置文件配置struts.xml如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!--
1、name指定包名,包与包之间的名称不能重复;
2、namespace包命名空间,用于拼我们访问包的
路径的,即URL。
不要忘记/线
3、extends指定包的继承关系的,这样我们可以
方便的使用Struts2提供的默认配置。
-->
<package name="demo"
namespace="/hello"
extends="struts-default">
<!--
1、action是我们自己要写的业务组件,
用于封装业务逻辑代码。
2、name是指定action的名称的,
该名称会用于我们访问action。
同一包下可以有多个action,
action名不能重复。
3、class指定该action对应的业务组件,
即我们自己定义的业务代码类。
4、method指定要访问的方法名。
这个method可以省略,若省略
则默认调用execute方法。
5、要访问当前的Action,其URL如下:
http://localhost:8080/struts2demo/hello/hello.action
http://ip:port/project_name/package_namespace/action_name.action
注意:action名称的后缀.action可以省略的
-->
<action name="hello"
class="demo.HelloAction"
method="sayHello">
<!--
1、用result指定action处理完请求之后,
要去向的页面。
2、name指定result的名称,
用于访问该result,
同一个action下可以有多个result,
他们之间不能重名。
-->
<result name="success">
/WEB-INF/jsp/helloStruts.jsp
</result>
<result name="error">
/WEB-INF/jsp/error.jsp
</result>
</action>
</package>
</struts>
3.示例Demo完整代码打包
Struts2示例demo完整代码下载地址:[点击进行下载]