在学习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. Python基础教程学习(三)

    如何定义类 class ClassName(base_class[es]): "optional documentation string" static_member_decla ...

  2. 第三方网站返回hybrid app H5页面缓存问题应对策略

    最近负责公司各产品线购买模块的开发,各项功能如期开发完成后测试那边反馈回来一个问题:IOS手机在点击支付宝购买后,跳转到支付宝网站时不输入支付密码,直接点返回,返回到我们自己的APP购买界面发现页面显 ...

  3. 拆解探索MagSafe电源接口结构和指示灯变颜色原理

    你有没有想过一个Mac的MagSafe接头里面有什么? 控制光线是什么? 在Mac如何知道它是什么样的充电器? 本文探讨的MagSafe连接器内,并回答这些问题. 2006年由苹果公司推出的MagSa ...

  4. 算法学习 - 平衡二叉查找树实现(AVL树)

    平衡二叉查找树 平衡二叉查找树是非常早出现的平衡树,由于全部子树的高度差不超过1,所以操作平均为O(logN). 平衡二叉查找树和BS树非常像,插入和删除操作也基本一样.可是每一个节点多了一个高度的信 ...

  5. 用Qemu模拟vexpress-a9 (一) --- 搭建Linux kernel调试环境

    参考: http://blog.csdn.net/linyt/article/details/42504975 环境介绍: Win7 64 + Vmware 11 + ubuntu14.04 32 u ...

  6. anroid源码下载和编译

    本文是在Ubuntu10.10系统上进行实践的. 1 因为我们需要Android的模拟器,所以需要安装Android的SDK,并创建AVD, 可以一次命名为AVD15,AVD22,AVD23,... ...

  7. [翻译] FreeStreamer 在线流媒体播放

    FreeStreamer https://github.com/muhku/FreeStreamer Introduction FreeStreamer is an audio player engi ...

  8. 如何在JTable中动态添加一行

    JTable tbImage = new JTable(5,5);//create a dummy tableDefaultTableModel dtm=(DefaultTableModel)tbIm ...

  9. Eclipse中运行Tomcat遇到的内存溢出错误

    使用Eclipse(版本Indigo 3.7)调试Java项目的时候,遇到了下面的错误: Exception in thread "main" Java.lang.OutOfMem ...

  10. google protocol buffer的原理和使用(二)

    本文主要会介绍怎么使用Google Protocol的Lib来序列化我们的数据,方法非常多种,本文仅仅介绍当中的三种.其它的方法读者能够通过自行研究摸索.但总的来说,序列化数据总的来说分为下面俩步: ...