一、struts2 入门

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。

1.MVC 设计模式

  • MVC 是 Model-View-Control 的简称,即模型-视图-控制器。它是一个存在于web应用中的表现层的模型,它将应用分开,改变应用之间的高度耦合,进行对程序的扩展性以及后期维护成本降低
  • MVC 模式将应用分为模型、视图和控制器三个部分:
  • 视图:数据的展现。 JSP 、 html 、 freemarker、 pdf 、 execl等
    视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理。视图可以向模型查询业务状态,但不能改变模型。视图还能接受模型发出的数据更新事件,从而对用户界面进行同步更新。
  • 模型:应用对象(数据模型、业务模型)。 JAVABEAN( DOMAIN、S ERVCIE 包下面的java 类)
    模型是应用程序的主体部分。 模型代表了业务数据和业务逻辑; 当数据发生改变时,它要负责通知视图部分;一个模型能为多个视图提供数据。由于同一个模型可以被多个视图重用,所以提高了应用的可重用性。
  • 控制器:逻辑处理、控制实体数据在视图上展示、调用模型处理业务请求。 (servlet 、 filter 充当控制器)
    当 Web 用户单击 Web 页面中的提交按钮来发送 HTML 表单时,控制器接收请求并调用相应的模型组件去处理请求,然后调用相应的视图来显示模型返回的数据。
    Mvc模型图:


    一、struts2 入门_第1张图片
    图片.png

2.三层架构

  • 所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。 三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过http协议和web服务器建立连接,找到程序中间层与数据库进行交互。
    三层架构的优点:
    优点:

  • 开发人员可以只关注整个结构中的其中某一层;

  • 可以很容易的用新的实现来替换原有层次的实现;

  • 可以降低层与层之间的依赖;

  • 有利于标准化;

  • 利于各层逻辑的复用。

缺点:

  • 降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。

  • 有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。增加了开发成本。

一、struts2 入门_第2张图片

3.Struts2 历史

  • 框架的理解:框架其实是一个半成品的程序,业务需求需要程序员去实现,模板性的功能及代码,框架进行了有效的封装,提高了程序员开发的效率,把更多的精力集中到了业务需求的开发上来。
  • Struts2框架在属于表现层的框架(三层架构的表现层)
  • Struts2框架基于MVC的设计模式实现
  • Struts1与Struts2的关系:严格上来讲,Struts2不是Struts1的升级版,Struts2=Struts1+webwork的结合体,吸取两个框架的有点而形成

早期现有struts1,struts1和struts2都是apache的产品,struts1在2003年左右比较火.在当时,表现层框架有很多:webwork框架。

  • Struts1 vs webwork 区别:

Struts1比较出名因为后台是apache,webwork不是很出名

Webwork框架的设计思想比较前卫(AOP),设计思想沿用至今,struts1的耦合性(servlet api)很紧密,入侵性,就导致使用struts1扩展性差

一、struts2 入门_第3张图片
图片.png

4.第一个Struts2 小程序

  • 导包:
    asm-5.2.jar
    asm-commons-5.2.jar
    asm-tree-5.2.jar
    commons-fileupload-1.3.3.jar
    commons-io-2.5.jar
    commons-lang3-3.6.jar
    freemarker-2.3.26-incubating.jar
    javassist-3.20.0-GA.jar
    jsp-api.jar
    log4j-api-2.9.1.jar
    log4j-core-2.9.1.jar
    ognl-3.1.15.jar
    servlet-api.jar
    struts2-core-2.5.14.1.jar
    struts2-core-2.5.14.1.jar
  • 配置 web.xml


   
   
   
   
       struts2
       org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
   
   
       struts2
       *.action
   
   

  • 创建 struts.xml 配置文件,该文件名称不能变,放置的路径一定在是class 路径的顶端
    • 配置的没有提示的问题,解决如下,


      图片.png

      一、struts2 入门_第4张图片
      图片.png

      一、struts2 入门_第5张图片
      图片.png



    
        
            
                /ok.jsp
            
        
    

  • 编写了一个 页面控制器 Controller
package com.xingxue.xingxue.web.controller;

public class HelloController {

    public String execute() {
        System.out.println("execute 方法执行了...");
        return "ok";
    }

}

5.Struts2 执行流程

  • 简易图


    一、struts2 入门_第6张图片
    图片.png
  • 官方图:


    一、struts2 入门_第7张图片
    图片.png

6.Action 动作类创建三种方式

  • 第一种方式
public class HelloController {
  • 第二种方式: 实现Action 接口
    提供了一个 execute 方法
    提供了4个常量:
/**
     * The action execution was successful. Show result
     * view to the end user.
     */
    public static final String SUCCESS = "success";

    /**
     * The action execution was successful but do not
     * show a view. This is useful for actions that are
     * handling the view in another fashion like redirect.
     */
    public static final String NONE = "none";

    /**
     * The action execution was a failure.
     * Show an error view, possibly asking the
     * user to retry entering data.
     */
    public static final String ERROR = "error";

    /**
     * 

* The action execution require more input * in order to succeed. * This result is typically used if a form * handling action has been executed so as * to provide defaults for a form. The * form associated with the handler should be * shown to the end user. *

* *

* This result is also used if the given input * params are invalid, meaning the user * should try providing input again. *

*/ public static final String INPUT = "input"; /** * The action could not execute, since the * user most was not logged in. The login view * should be shown. */ public static final String LOGIN = "login";
public class HelloController2 implements Action {

    @Override
    public String execute() throws Exception {
        return null;
    }
  • 第三方式: 继承ActionSupport ,可以使用 Struts2 提供的 国际化功能以及 数据校验功能
public class HelloController3 extends ActionSupport {

}

7.接收请求数据

  • 模型不分离:直接在 动作类的成员位置定义变量来接收
public class RequestController {
    // 动作类的方法:1,修饰符是 public 2.动作方法没有形参,3.方法的返回值有 String 或者 void

    public String name;
    public String password;

  • 模型分离 封装数据从动作类封装变为用模型来封装
public class RequestController {
    // 动作类的方法:1,修饰符是 public 2.动作方法没有形参,3.方法的返回值有 String 或者 void

    // public String name;
    // public String password;

    // 定义接收参数的模型
    public UserModel model = new UserModel();
a标签提交请求参数

8.动态视图数据处理

处理的数据带到页面的操作

  • servlet api 紧耦合版
    ServletActionContext:
    HttpServletRequest request = ServletActionContext.getRequest();
    HttpSession session = request.getSession();
    ServletContext servletContext = ServletActionContext.getServletContext();
  • 松耦合版 (推荐使用)
    ServletActionContext:
    ActionContext context = ActionContext.getContext();
        // 请求域中放数据
    context.put("", "");
    Map session = context.getSession();
    Map application = context.getApplication();

你可能感兴趣的:(一、struts2 入门)