Struts2上

Struts2第一部分

学习思路

  1. 入门案例先敲熟(重点
  2. 独立使用struts2框架完成登陆案例

知识点:

struts是JAVAEE结构中WEB层的框架。

框架概述

百度

是一组组件或者说是一个应用的半成品。

提高了生产效率和质量。

核心

  • 拦截器
  • action
  • ognl与valuestack

与struts2类似框架

struts1 webwork springmvc jsf

struts2代替servlet

入门案例

//Servlet完成
/**
 * Servlet 登陆案例
 */
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收封装参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //调用业务层(模拟)
        //页面跳转
        if("aaa".equals(username)&&"123".equals(password)){
            //成功,跳转success,重定向
            response.sendRedirect(request.getContextPath()+"/success.jsp");
        }else{
            //失败,跳转fail
            response.sendRedirect(request.getContextPath()+"/fail.jsp");
        }
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

struts入门案例执行流程

  1. 请求路径
  2. 被核心过滤器/前端控制器拦截
  3. 去找struts.xml文件中对应的action

使用struts2框架

  1. 导入jar包
  2. 在web.xml中配置一个filter(配置了才可以使用框架)
  3. struts2.xml配置
  4. 创建action完成操作

快速入门

struts2jar包目录解析

  • apps:示例代码
  • docs:文档
  • lib:相关jar包
  • src:源码

使用struts2框架不需要把所有jar包导入,只需要参考他的示例代码导包就可以了

配置StrutsPrepareAndExecuteFilter



    struts2
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter


    struts2
    /*

创建struts.xml




    
    
    

使用struts2

​ 在action中的name属性的值结合package中的namespace属性的值可以得到一个路径.从而调用指定的action方法.


    

获取参数

​ 在action类中提供成员变量和方法,就可以直接接收参数,名字必须和参数属性名相同.

public class LoginAction {
    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String login(){
        System.out.println("连接成功");
        //获取参数
        //判断
        if("aaa".equals(username)&&"111".equals(password)){
            return "success";
        }else{
            return "fail";
        }
    }
}

页面跳转

  1. 在action中的方法添加一个string返回值
  2. 在struts.xml配置确认跳转路径.


            /success.jsp
            /fail.jsp
        

Struts2核心文件

​ struts2共有三个部分的源代码

  • 核心部分源代码
    • core目录下的源代码
  • xwork核心部分源代码
  • 插件源代码
  1. 导源码:
  2. 配置dtd约束的提示功能

struts2完整执行流程

  1. 浏览器发送请求到服务器
  2. 服务器中的拦截器interceptor被加载,拦截请求
  3. 加载struts.xml,根据struts.xml的配置访问对应的action.
  4. 执行action
  5. 根据返回值找到对应的result标签
  6. 根据result属性来跳转视图.

struts2的配置文件struts.xml

  1. web.xml
  2. struts.xml
  3. struts-default.xml
  4. default.properties

加载顺序

第一个加载的是 default.properties 文件
​ 位置:strtus2-core.jar 包 org.apache.struts2 包下
​ 作用:主要是声明了 struts2 框架的常量

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

​ Strtus-default.xml
位置:struts2-corl.jar
作用:声明了 interceptor result bean

​ Strtus-plugin.xml
位置:在 strtus2 的插件包中
作用:主要用于插件的配置声明

​ Strtus.xml
位置:在我们自己的工程中作用:用于我们自己工程使用 strtus2 框架的配置
第三个加载的是自定义的 strtus.properties

位置:都是在自己工程的 src 下
作用:定制常量
第四自定义配置提供
第五加载的是 web.xml 配置文件

​ 主要是加载 strtus2 框架在 web.xml 文件中的相关配置.
第六加载 bean 相关配置

配置文件加载流程

  1. default.properties
  2. struts-default.xml
  3. struts-plugin.xml
  4. struts.xml
  5. web.xml

重点掌握

  • struts-default.xml能找到,知道里边有什么东西.
  • default.properties找到,知道里边有什么.
  • struts.xml每一个标签和每一个属性的作用.

struts.xml

package标签配置

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

action标签配置

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

result标签配置

​ 主要用于指示结果视图的

  • name属性:作用与action类的method方法的返回值进行匹配,来确定跳转路径.
  • type属性:用于指定跳转方式(redirect是重定向,不写默认是转发)

关于action配置中的class与method的默认值



    /success.jsp

​ 如果查找不到指定的 class 及对应的 method 就会执行ActionSupport 类中的 execute 方法。

​ 在这个类的 execute 方法中默认返回的是”success”也就是说,result 的 name 属性默认值是 success,默认的跳转方式是请求转发 dispatcher

常量配置

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

  1. 可以在src下创建一个struts.properties
  2. 在web.xml下也可以
在filter标签中:

  
  
  
    
    
  

  1. 可以直接在struts2.xml中声明
在struts标签里


struts.i18n.encoding----编码(utf-8)
struts.action.extension---指定访问(action,,)struts2框架路径的拓展名
struts.devMode---开启关闭(true/false)
配置这项后会提供更加详细的错误信息,以及修改struts.xml后不需要重启服务器

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

action类的创建方式

普通类

​ 在开发中不用.

继承(ActionSupport)

​ struts2中的action,主要是完成业务逻辑操作,替代了Servlet的作用

  1. 如何创建一个struts2的action
  2. 如何访问一个struts2的action

action类的创建方式详解

  1. 创建一个pojo类:

    ​ Pojo(plani Ordinary java object)简单的JAVA对象:就是没有实现任何接口,没有继承任何类的一个类.

    优点:无耦合

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

  2. 实现Action(struts2中的)接口

    ​ 在Action接口中定义了5个常量,1个execute方法.

    5个常量都是默认的5中结果视图

    • ERROR:错误视图
    • INPUT:它是struts2框架中interceptor发现问题后会访问的一个视图.
    • LOGIN:登陆视图.可以在权限操作中使用
    • NONE:什么都不做
    • SUCCESS:成功视图

    优点:耦合度低

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

  3. 创建一个类继承ActionSupport类

    ActionSupport类也实现了Action接口

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

    优点:功能多.

    ​ 例如:表单校验,错误信息设置,国际化

    缺点:耦合度高.

action类的访问

  1. 配置方式指定method(前边的知识)
标签访问
如果没有method访问execute
  1. 通配符(最常用)

关键字:*


*代表想调用的方法名
{1}的作用获取第一个*号的值

*号的值用这种方式获得

​ 不建议使用太多的*,带来了阅读的障碍.不便于理解

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

拓展--动态方法的调用

个人不建议使用动态方法调用!!

Struts2的数据封装

属性驱动

  • 直接在action类中提供与请求参数匹配属性提供get/set方法
  • 在action类中创始一个javaBean,对其提供get/set。在请求页面上要进行修改,例如:user.username user.password

以上两种方法的优缺点:

  • 第一种方法比较方便简单,但是在实际操作中我们需要将action的属性赋值给模型(javaBean)
  • 第二种,不需要给javabean直接赋值,但是它要求在页面上必须使用ognl表达式,就存在页面不通用的问题。

模型驱动

让action实现一个接口ModelDrivern

实例化模型对象(new一个JavaBean)

重写getModel方法返回一个实例化的模型

​ 对于模型驱动和属性驱动相比在实际开发中使用较多,但是它只能对一个模型数据进行封装。

关于 标签

result标签中的type属性标识页面跳转的方式:

  • dispatcher 默认,转发
  • redirect 重定向
  • chain 请求转发,针对action跳转
  • redirectAction 类似与重定向,针对action

全局result



    

你可能感兴趣的:(Struts2上)