**************************************
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>这些配置文件是用来干什么的?怎么执行的?
**************************************
首先说一下
你应该理解web中的过滤器吧 简单说 就是 他要配置一个url路径 当客户端请求了这个路径以后
你就要在他向执行什么动作之前 把这个路径截住 预先做你想做的事情 --- 这就是过滤器的功能
那么 Java Web中 过滤器也是一个类 所以 你要在url -pattern中说明 你想过滤那些url请求
在对应的filter-class里面 配置处理这些url的Java类
但是你随便定义的java类 web容器怎么知道他们是过滤器呢?
这就是要在这个web.xml中进行说明 我这个类(filter-class)是过滤器 Web容器才能赋予这个类相应
的权利来处理url-pattern中对应的客户端请求
其次:
要理解这个问题 你必须 了解 MVC Model(数据)--View(视图)--Controller(控制器)这个体系
Model: 操作数据库层(Hibernate操作Oracle DB2或者SQLServer或者 MySQL)----流行框架Hibernate 替代:JDBC
View: 页面层(JSP Html PDF)
Controller:控制器(当客户端发起URL请求的时候, Controller接收到请求之后 会决定由哪一个Model来处理请求)----流行框架SpringMVC或者Struts2 替代 Servlet
那么 Struts2就是Controller的扮演者
Struts2里面又一次细分成
(1)核心控制器 以前叫 org.apache.struts2.dispatcher.FilterDispatcher 现在叫 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
这个核心控制器 就是你web.xml中 在<filter-class>标签中配置的元素名称
(2)业务控制器 你要是用过struts2的话 你应该知道 还要配置struts.xml 这里面 配置了action name, action class, action method 每一个action name就是一个业务控制器
这样 struts2将Controller就划分为 核心控制器(FilterDispatcher)和业务控制器(struts.xml中配置的action)
当客户端发起的请求符合你在url-pattern中定义的路径时候(/*你这里是无论什么url请求 都会落入struts2的处理框架) , struts2的核心控制器(FilterDispatcher)就会拦截住
这个客户端请求 然后根据请求的名字 匹配相应的业务控制器的action name 匹配上了 就将请求发送到相应的业务控制器 进行处理 (比如和数据库的交互等等)
|