在学习struts的时候,我们一定要掌握struts2的工作原理。
仅仅有当我们明白了在struts2框架的内部架构的实现过程。在配置整个struts 的框架时。能够非常好的进行逻辑上的配置。接下来我就先简单的解说下struts2的框架工作原理:
一、struts2的工作原理
1、client初始化一个指向Servlet容器(比如Tomcat)的请求;
2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其它框架的集成非常有帮助,比如:SiteMesh Plugin);
3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否须要调用某个Action;
4、假设ActionMapper决定须要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。
5、ActionProxy通过ConfigurationManager询问框架的配置文件,找到须要调用的Action类;
6、ActionProxy创建一个ActionInvocation的实例。
7、ActionInvocation实例使用命名模式来调用。在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8、一旦Action运行完成,ActionInvocation负责依据struts.xml中的配置找到相应的返回结果。
返回结果一般是(但不总是。也可能是另外的一个Action链)一个须要被表示的JSP或者FreeMarker的模版。在表示的过程中能够使用Struts2框架中继承的标签。在这个过程中须要涉及到ActionMapper。
二、部署一个struts2项目的一般步骤
1)在Myeclipse中创建一个web项目,并将struts2须要的jar包导入进项目中,例如以下图
2)在项目中的web.xml中进行配置struts2的框架,在web.xml中须要包括在<filter></filter>,在该节点下能够包括<filter-name>和<filter-mapin
xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" 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_3_0.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <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>*.action</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> </web-app>
3)编写Action类4)创建好了Action类中要对action进行配置struts.xml,注意该配置文件的位置要在src的根文件夹下
5)创建jsp的文件,进行測试
三、struts.xml的配置初探
先来看看struts的基本配置的大概情况
从上面的代码中能够看出,xml中包括的再根节点下<struts></struts>下。在实际项目中的编写时,头部信息须要更改,那么我们给以在导入的jar中的jar包中进行获取/success.jsp /{1}.jsp
在struts-core-2.2.1.1.jar包下的struts2.0.dtd中进行获取。
四、struts.xml中的package的配置
看着前面的代码能够非常清晰的看到package的属性
属性有:
1. name:逻辑上的包名
2. namespace:命名空间。用来区分允许struts下的同样action(注意是一种逻辑上的的路径)
3. extends: 继承某个配置文件
4. abstract
详细使用过程中要注意。有与命名空间的命名,我们要在相应的过程中加上相应的命名空间的路径,比如:
<s:form action="db/login.action" method="post">
此代码说明的就是将会去调用db命名空间下的login相应的action
还须要注意的是:
<result>标签的下的是物理路径(绝对路径),即指在项目中的实际位置,代码例如以下
<result name="success">/login/error.jsp</result>
五、struts.xml中的action的配置
六、struts.xml中的result的配置
对于action的配置我这里面仅仅是简单的概括,详细非常多细节性的东西我将专门写一篇博客,主要解说的动态的对action进行配置
属性有:
1. name:Action类的映射名称
2. class:Action类的完整路径
3. method:默认使用的execute()方法,假设要自己定义触发方法,须要使用method自己定义
七、struts.xml配置过程中的注意信息
在实际开发的项目中,我们可能须要配置非常多的action,有时候为了便于我们的分类,我们一般须要创建不同包下的struts-user.xml文件,只是终于我们的这些配置都是要导入进我们的struts.xml文件里。使用的标签和jsp编程中<include>
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> <include file="struts-user.xml"></include> </struts>
struts-user.xml/login/success.jsp /login/error.jsp /login/error.jsp /login/success.jsp