sturts2框架知识点(Struts2框架----今天脑子有点炸)

1.struts2的源代码的导入:

  • 对于struts2框架它的源代码我们主要使用三部分

    1. truts2核心部分源代码 org.apache.struts2

      要查找的是core目录下的源代码

    2. struts2的xwork核心部分源代码

      \struts-2.3.37\src\xwork-core\src\main\java\com\opensymphony\xwork2

    3. struts2的插件的源代码

      src/plugins

2.关于 Struts.xml配置文件中提示问题:

  • 添加dtd文件 File-setting-Laguages & Frameworks-Schemas and DTDs

3.执行流程介绍

  1. 当浏览器发送一个请求

  2. 会被StrutsPrepareAndExecuteFilter拦截

  3. 会调用struts2框架默认的拦截器(interceptor)完成部分功能

    根据struts.xml文件调用指定action

  4. 再执行Action中操作

  5. 根据Action中方法的执行结果来选择来跳转页面Result视图

    一般StrutsPrepareAndExecuteFilter叫做前端控制器(核心控制器)只有配置了这个filter我们的struts2框架才可以使用。

    Struts2的默认拦截器(interceptor)他们是在struts-default.xml文件中配置

    注意:这上xml

4.Struts2配置详解

  1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bFJgdg7E-1615458822050)(C:\Users\chujunjie\AppData\Roaming\Typora\typora-user-images\image-20210311114446682.png)]

    • 第一个加载的是default.propertier文件

      位置:struts2-core.jar包 org.apache.struts2包下

      作用:

      ​ 主要是声明了struts2框架的常量

    • 第二个加载的是一批配置文件

      Struts-default.xml

      位置 struts2-corl.jar

      作用:声明了interceptor result bean

      Struts-plugin.xml

      作用:在struts2的插件包中,主要用于插件配置的说明

      struts.xml

      位置:在自己的工程中

      作用:用于我们自己的工程使用struts2 框架配置

    • 第三个加载的是自定义的struts.properties

      位置:在自己的src下

    • 第四个自定义的配置提供

    • 第五个加载的是web.xml文件

      主要是加载struts2框架在web.xml文件中的相关配置

    • 第六 bean的相关配置

  2. 重点掌握:

    • Default.properties
    • Struts-default.xml
    • struts-plugin.xml
    • struts.xml
    • web.xml

5.struts.xml文件配置介绍

  1. package配置

    • name属性 作用:定义一个包的名称,它必须唯一
    • namespace属性 作用:主要是与action标签的属性联合使用来确定一个action的访问路径
    • extends属性 作用:指定继承哪个包,一般是指struts-default struts-default包是在struts-default.xml文件中声明的
    • abstract属性,他代表当前包是一个抽象,主要用于被继承
  2. action

    • name属性 作用:主要是与package的那么space联合使用来确定一个action的访问路径
    • class属性 作用:用于指示当前的action类
    • method属性 作用:用于指示当前action类中执行哪个方法
  3. result配置

    它主要是指示我们的结果视图

    • name属性 作用:是与action类的method方法的返回值进行匹配,来确定跳转路径

    • 重定向(这个情况就应该跳转到相应的页面)和请求转发两种跳转

    • type属性 作用:用于指定跳转方式

    • 关于action配置中的class和method的默认值问题以及result中的name和type的默认值问题

      原因:struts-default.xml文件中配置

      <default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
      

      它的作用就是当一个请求来时如果查找不到指定的class及对应的method方法就会执行ActionSupport类中的execute方法,在这个方法中默认返回的是字符长“success”

      也就是说,result的那么属性默认值是success默认的跳转方式是请求转发 dispatcher

  4. 常量配置

    default.properties文件中定义了struts2框架常用常量

    问题:我们怎样可以定义常量

    1. 可以在src下创建一个struts.properties配置文件

    2. 可以在web.xml文件中配置(常用)

    3. 可以直接在struts.xml文件中定义常量(推荐的方法)

      我们是在总进行常量配置

    4. 注意:后加载的配文件中的常量会将先加载的常量覆盖

6.Struts2的Action详解

struts2中的action,主要是完成业务逻辑操作,action替代在servlet中完成的作用。

Action的学习有两点:

  1. 如何创建一个struts2的action
  2. 如何访问一个struts2的action
  • Action类的创建方式(三种)

    1. 创建一个pojo类

      pojo(plani Ordinary java object)简单的对象

      pojo类就是没有实现任何借口没有继承任何类

      优点:无耦合

      缺点:所有的功能都要自己完成

    2. 创建一个类实现一个Action接口

      import com.opensymphony.xwork2.Action;

      在Action接口中定义了五个常量 字符串,他们是默认的结果视图

      String SUCCESS = "success";正确视图
      String NONE = "none";代表null表示什么都不做
      String ERROR = "error";错误视图
      String INPUT = "input";他是struts2框架中interceptor中发现问题后访问的一葛视图
      String LOGIN = "login";他是一个登陆的视图,可以在权限操作中使用
      
      String execute() throws Exception;
      

      优点:耦合度低

      缺点:还是需要自己来完成功能

    3. 创建一个类继承ActiongSupport类

      import com.opensymphony.xwork2.ActionSupport;

      ActionSupport也实现了Action接口

      我们再开发中一般会使用这种方案

      优点:具有丰富的功能,例如表单效验 错误信息设置 国际化

      缺点:耦合度高

3.action的访问方式

  • 直接通过标签来配置,通过method来指定访问的方法,如果method方法没有默认的就是访问execute方法

  • 简化的antion访问方式,可以使用*通配符来访问

    ​ 这种方法的缺点:不建议使用过多的*号,它带 来程序阅读障碍,不便于理解

    ​ 使用*来简化操作方案,它对名称规范必须进行 一个统一

  • struts2的动态方法调用

    • localhost:80/struts2-day01/struts2!show

    • 这是struts2提供的动态方法调用

    • 注意:对于struts2的动态方法调用,要想使用我们必须配置一个常量来开启动态方法的调用

    • struts.enable.DynamicMethodInvocation = false 这表示我们的动态方法调用没有开启

    • (不建议使用动态方法调用!!!!有漏洞)

7.Struts2框架封装数据

​ 主要解决的问题是在action中如果获取请求参数

主要有两种方式:

  1. 属性驱动

    • 直接在action类中提供与请求参数匹配属性,提供get/set方法

    • 在action类中创始一个javaBean,对其提供get/set,在请求时页面要进行修改例如 user.uername user.password 要使用ognl表达式

      以上两种方式的优缺点:

      ​ 第一种比较简单,在实际操作我们需要将action的属性赋值给模型javaBean去做操做

      ​ 第二种不需要将值赋给jabaBean的过程,因为直接将数据封装到了javaBean中。它要求在页面上必须使用ognl表达式,就存在页面不通用的问题

  2. 模型驱动

    步骤:

    • 让Action类要实现一个指定的接口ModelDriven
    • 实例化模型对象(就是要new出来javaBean)
    • 重写getModel方法将实例化的模型返回
    public class LoginAction2 implements Action,ModelDriven<User> {
    //模型驱动
        private User user = new User();
        @Override
        public User getModel(){
            return user;
        }
    

对于模型驱动他和属性驱动对比,在实际开发中使用比较多,模型驱动的缺点,他只能对一个模型数据进行封装。

va
public class LoginAction2 implements Action,ModelDriven {
//模型驱动
private User user = new User();
@Override
public User getModel(){
return user;
}


对于模型驱动他和属性驱动对比,在实际开发中使用比较多,模型驱动的缺点,他只能对一个模型数据进行封装。



版权声明:本文为weixin_43562378原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。