struts2(一)之初识struts2 一、struts2概述 二、struts2架构分析 三、搭建struts2环境 四、写一个demo 五、测试例子执行过程分析 六、struts的配置文件

前言

  我们都知道struts2是一个框架,那什么是框架呢?很多人其实不太明白,其实框架就是一个半成品,别人将一些功能已经写好了,我们只需要拿来用即可,像我们之前

  使用的dbutils框架,操作数据,只需要两行代码,不用像一开始一样,老老实实的写一大堆代码,这就是开发框架的意义所在。简化开发(个人对框架认识的理解,其他

  还有在框架上加自己的代码这些就不说了,肯定还有别的很多功能,这只是我最好理解的一种方式)。

  框架的定义和作用:

    把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的经历放到业务需求的分析和理解上面。
    特点:封装了很多细节,程序员在使用的时候会非常简单。

  Struts2就是一个web层框架,并且是使用MVC设计模式实现的的一个框架,之前使用的是Serlvet+JSP来开发web项目,现在用Struts2框架来替代他,那Struts2到底有

  哪些优点呢?

    请求    -----------  Servlet      --------------  JSP    serlvet+JSP

    请求    -----------      Action   --------------  JSP    Struts

1.1、简介

  百度上说的是:

    struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

    Struts2是Apache发行的MVC开源框架。注意:它只是表现层(MVC)框架

    struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

1.2、来历

  Struts1:也是apache开发的一套mvc的开源框架。在2005年之前非常流行。
      弊端:Struts1的核心控制器就是一个Servlet。随着使用者的增多,弊端开始出现。
  Struts2:在long long ago,有一个设计超前的框架XWork,后来推出了XWork1和WebWork2。Struts2就是apache和OpenSymphony组织合并开发出来。
      里面包含了WebWork2的核心及Struts的一些特性和功能。除此之外,和Struts1没有任何关系了。

二、struts2架构分析

  首先了解前,必须先要知道Struts2的架构图,知道是如何工作的,做了哪些事情,可以不必那么详细的知道每一块具体的细节,先让我们自己有个大概的了解,

  这样我们就更容易去接受它,使用它。

  struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

  第一步:请求action,那么就会经过StrutsPrepareAndExecuteFilter,这里会做两件事情,就是下面的两步

  第二步:通过ActionMapping将请求中的各种数据封装起来,拿到请求中的各种参数数据,比如我们的action的名称DemoAction

  第三步:给自己找一个代理对象ActionProxy,来帮助我们处理事情。注意,这个ActionProxy实际上不做任何实事的,而是指挥别人做

  第四步:ActionProxy叫ConfigManager获取struts.xml中的各种配置信息,其中struts.xml就有action的类全限定类名等信息,这样就可以通过action的名字找到其位置了

  第五步:有了actionMapping获取的请求数据和ConfigManager获取的struts.xml中的数据,就叫ActionInvacation来查找对应的action了

  第六步:在找到action之前会经过一系列的拦截器,struts内部默认实现的。找到action后,就相当于我们的servlet,在其中执行一些业务代码,然后跳转到目标页面,

      响应回去。struts的整个过程即结束了。

  就是这么简单,struts2的整个执行过程就这样,而现在我们要写一个struts2的hello world的话,根据struts2的架构图,我们需要配置2个东西,

  第一个最关键的,在web.xml中配置strutsPrepareAndExecuteFilter即过滤器,配置了该过滤器,请求才会走struts2框架

  第二个,struts.xml文件,其中应该有的内容是通过action的名字就能够找到其位置在哪里,稍微会详细讲解。 

三、搭建struts2环境

  我们只需要三步就可以完成:导入jar包、在web.xml中配置过滤器、配置struts.xml。

3.1、导入jar包

  1)下载struts2jar包

    http://struts.apache.org(struts-2.3.15.3)

  2)开发包目录结构

    struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

  3)需要的jar包

    这里注意一点,lib下面有100多个jar包,并不需要导入这么多,我们在apps(案例)中找jar包即可,apps-blank.war是最简单的案例,

    我们把其后缀名改为zip,然后解压,找到其中的lib目录下的jar包复制就行了。

    struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

    拷贝jar包到classpath中(也就是WEN-INF下面的lib包)

    struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

3.2、在web.xml中配置过滤器

  配置的位置:web.xml中

  配置的是什么:Struts已经写好的过滤器

  struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <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>
</web-app>
web.xml

3.3、配置struts.xml

  在src目录下创建一个默认名称为struts.xml的配置文件 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
</struts>

  注意:文件名的大小写、创建的位置、该文件名允许被修改但是我们一般不修改它。

  这是我们可以验证是否搭建成功:

    部署应用,启动tomcat,不报错表示配置成功

四、写一个demo

  1)创建一个jsp文件(index.jsp)

  struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

  2)在struts.xml中配置

  struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

  配置信息详解:

  struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

  3)创建动作类和动作方法

  struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

  4)结果视图

  success.jsp

  struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

  5)测试

    struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

    点击以.action结尾:

    struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

    点击不以.action结尾:

    struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

问题:关于struts.xml没有提示的问题

  原因:没有找到相应的dtd约束文件

  解决办法:

    1.上网

    2.不能上网

    找到struts jar包中的struts-2.3.dtd文件

    struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

    在项目中与lib包同级目录下创建一个dtd文件夹把jar包放进去

    在myeclipse中配置

    struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

五、测试例子执行过程分析

  struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

  详细的过程:

  struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

六、struts的配置文件

  加载时机:当应用被tomcat加载的时候,struts2的配置文件就已经被加载过了。

6.1、配置文件加载顺序

  struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

  注意:  

    1)Struts2提供了两种配置的方式。一种是key=value的方式,即使用.properties文件。另一种是xml文件配置。我们推荐使用xml文件(它能描述层级关系)。

    2)当多个配置文件中,有相同的参数,后面的会把前面的值给覆盖了。

6.2、struts-default.xml文件

  这里解释一下struts.xml中的package继承问题。上面继承了一个struts-default的包,想要查看它中的内容很简单,在我们加入的struts2-core-2.3.15.1.jar包

  找到struts-default.xml,在该配置文件中就有package为struts-default的内容。

  struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

  从名字上看,就应该知道该是struts的一个默认的配置文件,而我们前面编写的一个struts.xml中应该会使用该默认配置文件中的内容,其中的格式跟我们写的struts.xml是一样的。

  分两大部分:

    第一部分 全是bean开头的配置,暂时不管他是干嘛用的,后面会学习,而我们的重点是第二部分

    第二部分 看到了熟悉的内容,package,并且该package的名字为struts-default。这就是我们需要查找的包,其中的内容包括了三个部分:

      1)<result-types></result-types>看到这里我们就明白为什么我们的结果中跳转页面的方式默认是dispatcher(转发),因为在继承的struts-default包中将其设置成了默认的,

       还有很多其他的type可选择,比如其中的redirect,就是重定向,比如redirectAction,从一个action跳到另一个action中执行。比如stream,文件上传时用的,等等这些等

         后面会详细讲到。有个大概映像即可。

      2)<interceptors></interceptors>,这里是一系列的过滤器,就是我们讲的架构图中的那一系列拦截器,就是在这里给配置的。

      3)最后一个是两个零碎的配置

        struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

        321行:配置说默认的一个拦截器为defaultStack,这是一个拦截器栈,其内容在第二部分中。

        323行:这里说的class为在我们action中的class,如果不写则为com.opensymphony.xwork2.ActionSupport。ActionSupport这个类就我们下面要讲解的action继承它来当

            action,那时候再与普通类当action有什么区别。

    总结:struts-default.xml的功能就是将一些已经有的功能加入到配置文件中,然后让我们编写的struts.xml继承其中的包,那么我们就具备了这些功能,不用自己手动编写了,如果想

      在上面添加功能,在编写即可。到这里为止应该就解决了为什么要继承struts-default这个包了把

6.3、default.properties配置文件

  default.properties,这是一个常量的配置文件。其中放的都是常量。

  struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

  常量定义在了default.properties配置文件中,体现形式都是key=value。所有的struts2应用都会用到这些常量。

  常用的常量有 :

  struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

6.3、覆盖常量的三种方式

  1)在struts.xml中覆盖常量

  struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

  注意:与package是同级目录。

  2)创建struts.properties文件覆盖  

  struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

  3)在web.xml文件中配置过滤器参数

  struts2(一)之初识struts2
一、struts2概述
二、struts2架构分析
三、搭建struts2环境
四、写一个demo
五、测试例子执行过程分析
六、struts的配置文件

喜欢就推荐哦!