在学习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 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>
<package name="user" namespace="/" extends="struts-default">
<action name="*user" class="com.zzjmay.action.VaildateAction" method="{1}">
<result name="success">/success.jsp</result>
<result name="input">/{1}.jsp</result>
</action>
</package>
</struts>

从上面的代码中能够看出,xml中包括的再根节点下<struts></struts>下。在实际项目中的编写时,头部信息须要更改,那么我们给以在导入的jar中的jar包中进行获取

在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

<?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>
<constant name="struts.ui.theme" value="simple"></constant>
<package name="user" namespace="/ss" extends="struts-default">
<action name="login" class="com.zzjmay.action.UserAction"
method="execude2">
<!--result下的路径是物理路径 -->
<result name="success">/login/success.jsp</result>
<result name="error">/login/error.jsp</result>
</action>
</package>
<!-- 包名不能同样 -->
<package name="user123" namespace="/db" extends="struts-default">
<action name="login" class="com.zzjmay.action.UserAction"
method="execude2">
<!--result下的路径是物理路径 -->
<result name="success">/login/error.jsp</result>
<result name="error">/login/success.jsp</result>
</action>
</package>
</struts>

Struts2的配置文件的配置struts.xml的更多相关文章

  1. Struts2(三) 配置struts.xml的提示(在不联网的情况下)

    开发过程中如果可以上网,struts.xml 会自动缓存dtd,提供提示功能.如果不能联网需要我们配置本地dtd,这样才能让struts2 产生提示 1.首先,在EClipse中依次点击工具栏中的wi ...

  2. 转载 Struts2的配置 struts.xml Action详解

    在学习struts的时候,我们一定要掌握struts2的工作原理.只有当我们明确了在struts2框架的内部架构的实现过程,在配置整个struts 的框架时,可以很好的进行逻辑上的配置.接下来我就先简 ...

  3. 1-1 struts2 基本配置 struts.xml配置文件详解

    详见http://www.cnblogs.com/dooor/p/5323716.html 一. struts2工作原理(网友总结,千遍一律) 1 客户端初始化一个指向Servlet容器(例如Tomc ...

  4. struts2——配置struts.xml文件

    在struts2框架中struts.xml是应当放到src的根目录,程序编译后会将struts.xml放到WEB-INF/classes目录下. Struts2在web.xml中的一般配置如下: &l ...

  5. 配置Struts.xml DTD文件报错

    报错信息为: The content of element type "struts" must match "((package|include|bean|  cons ...

  6. struts2 配置 struts.xml 提示

    1.这个提示通常是在 连网络的时候才可以看到 2.当没有网路的时候我们该如何配置呢? window -->preferences -->xml catelog -->user.... ...

  7. eclipse配置struts.xml自动提示

    a)window – preferences – xml - xml catalog –> add  b)选择key type为URI c)key: http://struts.apache.o ...

  8. Struts2配置文件复用代码【web.xml、struts.xml、常量配置】

    web.xml的分发器代码: <!-- 引入struts核心过滤器 --> <filter> <filter-name>struts2</filter-nam ...

  9. struts2:struts.xml配置文件详解

    1. 几个重要的元素 1.1 package元素 package元素用来配置包.在Struts2框架中,包是一个独立的单位,通过name属性来唯一标识包.还可以通过extends属性让一个包继承另一个 ...

随机推荐

  1. 使用 C++ 的 StringBuilder 提升 4350% 的性能

    http://blog.jobbole.com/109663/?utm_source=blog.jobbole.com&utm_medium=relatedPosts http://msdn. ...

  2. .Net C#上传文件最大设置

    <!--网页允许的最大设置节点--> <system.web> <httpRuntime targetFramework="4.5" maxReque ...

  3. js判断手机端和pc端

    var browser = { versions: function() { var u = navigator.userAgent, app = navigator.appVersion; retu ...

  4. StringBuilder和StringBuffer解析(百度面试题优化须要用到的)

    StringBuilder是java5及以后提供的API,它不是线程安全的,而StringBuffer是java1.4曾经的API,它是线程安全的,所以说StringBuilder的效率更高一些,今天 ...

  5. MVC无限级分类01,分层架构,引入缓存,完成领域模型与视图模型的映射

    本系列将使用zTree来创建.编辑关于品牌.车系.车型的无限级分类,使用datagrid显示,源码在github.先上最终效果: datagrid显示所有记录.分页,提供添加.修改.删除按钮,并提供简 ...

  6. NPOI读取Excel日期类型单元格返回一串数字问题

    public string getCellStringNEW(int row, int column) { try { ICell cell = xlSheet.GetRow(row).Cells[c ...

  7. .NET:CLR via C#The Managed Heap and Garbage Collection

    Allocating Resources from the Managed Heap The CLR requires that all objects be allocated from the m ...

  8. html 中怎么设置div的位置

    利用CSS的position属性对元素定位,以下是position 属性规定元素的定位类型. absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位.元素的位置通过 ...

  9. Oracle 10g AND Oracle 11g手工建库案例--Oracle 10g

    Oracle 10g AND Oracle 11g手工建库案例--Oracle 10g 系统环境: 操作系统: RedHat EL6 Oracle:  Oracle 10g and Oracle 11 ...

  10. 采用Operator-sdk轻松将helm chart转为Operator

    去年就接触Operator,从Oracle发布的WebLogic Operator到mySQL Operator,构建的源码一大堆,但感觉一直缺少合适的开发框架能够避免复杂性快速生成, 随着技术的日益 ...