前言

我们现在学习的是Struts2,其实Struts1和Struts2在技术上是没有很大的关联的Struts2其实基于Web Work框架的,只不过它的推广没有Struts1好,因此就拿着Struts这个名气推出了Struts2框架。

因此,学习Struts2的时候,不了解Struts1是没有任何关系的。

在开山篇的时候,已经说明了为什么要引入Struts框架,其实就是为了提高开发效率…

Struts2框架预先实现了一些功能:

  • 请求数据自动封装
  • 文件上传的功能
  • 对国际化功能的简化
  • 数据效验功能…….等等

Struts2开发步骤

我们就直接来讲解Struts2的开发步骤是什么吧….在了解它的细节之前,先要把配置环境搭好!

引入jar文件

完整的struts中的jar包有80多个,我们日常开发是不需要那么多个的。一般我们导入的jar包有8个:

  • commons-fileupload-1.2.2.jar 【文件上传相关包】
  • commons-io-2.0.1.jar【文件上传相关包】
  • struts2-core-2.3.4.1.jar 【struts2核心功能包】
  • xwork-core-2.3.4.1.jar 【Xwork核心包】
  • ognl-3.0.5.jar 【Ognl表达式功能支持表】
  • commons-lang3-3.1.jar 【struts对java.lang包的扩展】
  • freemarker-2.3.19.jar 【struts的标签模板库jar文件】
  • javassist-3.11.0.GA.jar 【struts对字节码的处理相关jar】


配置web.xml

在web.xml中配置的过滤器,其实就是在为struts进行初始化工作

值得注意的是:如果该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>

开发Action

开山篇我们已经说了,Servlet的业务代码,我们都使用Action来代替…Action类一般继承着ActionSupport

Action类也叫动作类,处理请求的类。


public class HelloAction extends ActionSupport { @Override
public String execute() throws Exception { System.out.println("helloworld"); return "success";
}
}

至于execute()方法是什么,我们先不要去管它,为啥要返回一个String,我们也不要去管它….只要记住开发步骤,并且,我们的Action类是要继承ActionSupport类的

配置struts.xml

至于配置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()中的语句被执行了…


Struts2执行流程

我们来简单地了解一下Struts的执行流程,然后再慢慢对上面的开发步骤的部分进行讲解….

服务器启动

下边我说的都是struts流程的重点:

  • 加载web.xml文件
  • 找到我们配置的filter中的StrutsPrepareAndExecuteFilter
  • StrutsPrepareAndExecuteFilter在里边执行init()方法
  • 一直到Dispatcher dispatcher = init.initDispatcher(config);,初始化dispatcher
  • 在初始化dispatcher的时候加载struts-default.xml和我们配置的struts.xml

下面用GIF图来看看它的执行过程:

细心的朋友可能会发现,我们在struts.xml的package节点下,extends了struts-default….那struts-default究竟是什么东西呢?

我们找到它的源码:

我们发现了一大堆的Bean,interceptor,result-type,interceptor-stack…下边我来讲解一下它们是干嘛用的…

  • bean指定了struts在运行的时候需要创建的对象类型

    • 在运行struts的时候,可能需要创建一些对象,那么就通过Bean来指定
  • interceptor是struts定义的拦截器,一共有32个
    • 前边已经说了,Struts为我们实现了一些功能,就是通过拦截器来实现的
  • result-type是跳转结果的类型
    • Action业务方法中的返回值,我们发现几个实用的:redirect【重定向】、dispatcher【转发】、redirectAction【重定向到Action资源】、stream【文件下载的时候用】…跳转结果的类型也在这里定义了
  • interceptor-stack是拦截器的栈
    • 拦截器有32个,我们可能会使用很多的拦截器,不可能一个一个来调用,于是提供了拦截器栈…其实可以简单看成文件夹和文件之间的关系
  • default-interceptor-ref是默认执行的拦截器栈
  • default-class-ref class是默认的执行Action类

还要补充的就是:默认的拦截器栈有18个拦截器….


拦截器和过滤器

拦截器和过滤器都是拦截资源的

拦截器只拦截Action请求,是struts的概念…

过滤器拦截web的所有资源,是Servlet的概念…


小总结

服务器启动的时候,其实就是加载了web.xml文件,然后调用init()方法去加载struts.xml和struts-default.xml之类的文件…..

注意:此时的拦截器是还没有被调用的


访问阶段

服务器启动的阶段,仅仅是加载了各种的xml文件…那么当我们访问Action的时候,它的执行流程是怎么的呢?

  • 首先,它会创建我们在struts.xml中配置的Action对象
  • 接着,它会按照默认的顺序执行18个拦截器【也就是调用默认拦截器栈】
  • 最后,它会执行Action的业务方法【也就是execute(),我们在struts.xml文件中配置了什么,就执行什么业务方法】

值得注意的是:每访问Action一次,它就会创建一个对象…它并不是和Servlet一样只有一个对象…因此它是线程安全的.


深入讲解struts.xml

这是我们的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

package其实就是包,那包用来干什么?包就是用来管理Action

通常来说,我们都是一个业务模版对应一个package

name

name是包的名字,值得注意的是,包的名称是不能重复的。


extends

extends代表的是当前包继承着哪个包。在struts中,包一定要继承着struts-default


abstract

在package中还有abstract这个属性,使用该属性时:表明当前包被其他的包继承…并且,在package下不能有action,否则会出错!


namespace

在package中还有namespace这个属性—名称空间….它是作为路径的一部分的,默认是”/”


actoin

action:配置请求路径与Action类的映射关系


name

name是请求路径的名字


class

class是处理action类的全名


method

method是调用的方法名称


result

result代表的是Action中业务方法返回的值


name

name是action处理返回的值


type

type是跳转的类型


文本值

文本值是跳转的路径


细节

前边已经说了,一个package应该对应一个业务模块..目的就是把职能细分出来

struts为了让我们更好地管理xml文件,它还可以这样做:在不同的模块中用不同的xml文件进行描述

最后在struts.xml文件中将其引入即可..


<!--struts在运行的时候总会加载这个文件-->
<!--总配置文件总引入其他的文件-->
<struts>
<include file="privilegeaction/privilege.xml"/>
<include file="useraction/hello.xml"/>
</struts>

Struts2第二篇【开发步骤、执行流程、struts.xml讲解、defalut-struts讲解】的更多相关文章

  1. struts2+hibernate整合开发步骤

    百度的各种代码,步骤,自己整合了一下 1,创建数据库 常用mysql   creat table..... 2,在WebContent下的bin中添加相应的包 http://pan.baidu.com ...

  2. SSH框架之Struts2第二篇

    1.2 知识点 1.2.1 Struts2的Servlet的API的访问 1.2.1.1 方式一 : 通过ActionContext实现 页面: <h1>Servlet的API的访问方式一 ...

  3. Auty自动化测试框架第二篇——读取与执行脚本列表

    [本文出自天外归云的博客园] 在Auty中的文件结构,lib目录下的read_selection.py和execute_selection.py文件:

  4. Struts2应用的开发步骤

    1.在web.xml文件中定义核心Filter来拦截用户请求 由于web应用是机遇请求/响应框架的应用,所以不管哪个MVC Web框架,都需要在web.xml中配置该框架的核心Servlet或Filt ...

  5. 第二篇:git创建流程

    1.创建组织 2.创建 3.点击项目 创建完: 4.选择管理——>选择公钥——>添加个人公钥: 5.怎样生成公钥 5.1.如何生成ssh公钥 你可以按如下命令来生成 sshkey: ssh ...

  6. 关于struts2.0 中 struts.xml设置了struts.devMode 的值为TRUE后仍然不起作用的分析

    首先确认jdk 和tomcat的环境变量是否配置正确. 下面是配置方式 jdk的环境变量配置步骤: 安装j2sdk以后,需要配置一下环境变量,在我的电脑->属性->高级->环境变量- ...

  7. Struts2与Hibernate联合开发步骤

    hibernate与struts2的联合开发步骤: 1. 建立web工程 2. 加入jar包,struts2.hibernate.数据库连接的包 3. 数据表和bean之间的映射,以及相应的映射文件* ...

  8. Struts2第二天

    Struts2第二天 昨天: 1.Action的编写方式:实现Action接口.继承ActionSupport.自定义pojo作为action 2.action调用方法:默认的execute.meth ...

  9. struts2.1.6教程二、struts.xml配置及例程

    1.配置文件的优先级 在struts2中一些配置(比如常量)可以同时在struts-default.xml(只读性),strtus-plguin.xml(只读性),struts.xml,struts. ...

随机推荐

  1. 截取TableView生成图片

    先看一下实例效果: 如果所示,这是一个在APP中截图,并调起微信客户端,发送给好友的例子,图片就是一个tableView的截图. 先实现一个小例子,如果tableVIew里面的内容,没有超过当前屏幕显 ...

  2. mysql、oracle和SQL server数据库的区别

    1.总体对比. SQL,在这里我理解成SQL Server.三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性.排行第四的DB2(属IBM公司),与Oracle的定位和架构非常相 ...

  3. 程序员的自我修养五Windows PE/COFF

    5.1 Windows的二进制文件格式PE/COFF PE文件格式事实上与ELF同根同源,它们都是由COFF格式发展而来. 5.2 PE前身——COFF 在win下,Command Prompt fo ...

  4. myeclipse db browser 新建数据源

    Myeclipse 新建数据源 一.打开myeclipse(打开了当我没说) 二.在window选项中找到show view ,点击other,输入db,选择DB Browser 三.在DB Brow ...

  5. Ubuntu 安装和使用 Supervisor(进程管理)

    服务器版本 Ubuntu 16.04 LTS. Supervisor 是一个用 Python 写的进程管理工具,可以很方便的对进程进行启动.停止.重启等操作. 安装命令: $ apt-get inst ...

  6. 一文教你迅速解决分布式事务 XA 一致性问题

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯云数据库团队 近日,腾讯云发布了分布式数据库解决方案(DCDB),其最明显的特性之一就是提供了高于开源分布式事务XA的性能.大型 ...

  7. javasript校验字符串【正则和其他函数】

    /**javasript校验输入框值只能为数字中文英文和下划线**/function isRegex(s){ var reg=/^[a-zA-Z0-9_\u4e00-\u9fa5]+$/; if (! ...

  8. Redis订阅和发布模式和Redis事务

    -------------------Redis订阅和发布模式------------------- 1.概念     Redis 发布订阅(pub/sub)是一种消息通信模式:     发送者(pu ...

  9. Zookeeper的安装的配置

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt192 安装和配置详解 本文介绍的 Zookeeper 是以 3.2.2 这个 ...

  10. 详解 anjularjs的ui-route(多视图、视图嵌套、视图传参)

    最近整理了一下anjularjs的第三方插件ui-route,在这就以一个demo的形式讲解一下.整片博客均以开头的demo代码为例.下边是个目录,大家可以酌情直接跳转浏览. 1. demo的代码 2 ...