咱们如今学习的是Struts2,其实Struts1和Struts2在技术上是没有很大的关联的。Struts2其实基于Web Work框架的,只不过它的推广没有Struts1好,所以就拿着Struts这个名气推出了Struts2框架。java
所以,学习Struts2的时候,不了解Struts1是没有任何关系的。web
在开山篇的时候,已经说明了为何要引入Struts框架,其实就是为了提升开发效率…apache
Struts2框架预先实现了一些功能:安全
咱们就直接来说解Struts2的开发步骤是什么吧….在了解它的细节以前,先要把配置环境搭好!服务器
完整的struts中的jar包有80多个,咱们平常开发是不须要那么多个的。通常咱们导入的jar包有8个:markdown
在web.xml中配置的过滤器,其实就是在为struts进行初始化工做app
值得注意的是:若是该web.xml配置了多个fileter,那么struts的filter须要在最后面!框架
<!-- 引入struts核心过滤器 --> <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>
开山篇咱们已经说了,Servlet的业务代码,咱们都使用Action来代替…Action类通常继承着ActionSupportjsp
Action类也叫动做类,处理请求的类。ide
public class HelloAction extends ActionSupport { @Override public String execute() throws Exception { System.out.println("helloworld"); return "success"; } }
至于execute()方法是什么,咱们先不要去管它,为啥要返回一个String,咱们也不要去管它….只要记住开发步骤,而且,咱们的Action类是要继承ActionSupport类的
至于配置struts.xml,咱们能够在文件中找到相对应的模版代码的…最终修改为下面这个样子就好了:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="hello" extends="struts-default"> <action name="hello" class="action.HelloAction" method="execute"> <result name="success">/index.jsp</result> </action> </package> </struts>
看完上面的配置文件,是很是像咱们开山篇写的struts框架的配置文件的….
在地址栏中直接输入hello,就跳转到index.jsp页面了。而且,execute()中的语句被执行了…
咱们来简单地了解一下Struts的执行流程,而后再慢慢对上面的开发步骤的部分进行讲解….
下边我说的都是struts流程的重点:
Dispatcher dispatcher = init.initDispatcher(config);
,初始化dispatcher下面用GIF图来看看它的执行过程:
细心的朋友可能会发现,咱们在struts.xml的package节点下,extends了struts-default….那struts-default到底是什么东西呢?
咱们找到它的源码:
咱们发现了一大堆的Bean,interceptor,result-type,interceptor-stack…下边我来说解一下它们是干吗用的…
还要补充的就是:默认的拦截器栈有18个拦截器….
拦截器和过滤器都是拦截资源的
拦截器只拦截Action请求,是struts的概念…
过滤器拦截web的全部资源,是Servlet的概念…
服务器启动的时候,其实就是加载了web.xml文件,而后调用init()方法去加载struts.xml和struts-default.xml之类的文件…..
注意:此时的拦截器是尚未被调用的。
在服务器启动的阶段,仅仅是加载了各类的xml文件…那么当咱们访问Action的时候,它的执行流程是怎么的呢?
值得注意的是:每访问Action一次,它就会建立一个对象…它并非和Servlet同样只有一个对象…所以它是线程安全的.
这是咱们的struts.xml的内容,相信如今对它也不会太陌生了…
<struts> <package name="hello" extends="struts-default"> <action name="hello" class="action.HelloAction" method="execute"> <result name="success">/index.jsp</result> </action> </package> </struts>
package其实就是包,那包用来干什么?包就是用来管理Action
一般来讲,咱们都是一个业务模版对应一个package
name是包的名字,值得注意的是,包的名称是不能重复的。
extends表明的是当前包继承着哪一个包。在struts中,包必定要继承着struts-default
在package中还有abstract这个属性,使用该属性时:代表当前包被其余的包继承…而且,在package下不能有action,不然会出错!
在package中还有namespace这个属性—名称空间….它是做为路径的一部分的,默认是”/”
action:配置请求路径与Action类的映射关系
name是请求路径的名字
class是处理action类的全名
method是调用的方法名称
result表明的是Action中业务方法返回的值
name是action处理返回的值
type是跳转的类型
文本值是跳转的路径
前边已经说了,一个package应该对应一个业务模块..目的就是把职能细分出来…
struts为了让咱们更好地管理xml文件,它还能够这样作:在不一样的模块中用不一样的xml文件进行描述…
最后在struts.xml文件中将其引入便可..
<!--struts在运行的时候总会加载这个文件--> <!--总配置文件总引入其余的文件--> <struts> <include file="privilegeaction/privilege.xml"/> <include file="useraction/hello.xml"/> </struts>