详解Java的Struts框架以及相关的MVC设计理念

详解Java的Struts框架以及相关的MVC设计理念

什么是MVC设计模式

MVC(Model-View-Controller)是一种常见的设计模式,它将一个应用分为3种职责:模型(Model)负责数据存储与处理;视图(View)负责用户界面的显示;控制器(Controller)负责业务逻辑的处理。把系统分为3个组件使得各自的职责分明,且耦合度低。MVC的设计模式被广泛应用于各种应用开发中,包括Java Web应用中。

Struts框架

Struts是一个开源的Java Web应用MVC框架,构建于Servlet API之上,基于MVC设计模式,它允许开发人员通过配置文件或注解轻松配置应用程序的行为。它提供了一组自定义的标签库,用于生成HTML表单。它还提供了拦截器的概念,用于将端到端处理业务逻辑的行为加入到应用程序中。

Struts框架的优势

Struts框架的架构可以使开发人员更专注于Java Web应用程序的实现,而不必花费大量时间在开发基础结构和处理细节上。以下是Struts框架的优势:

  1. 轻松扩展:Struts框架使用MVC设计模式,该模式将应用程序分成三个组件,因此可以更轻松地扩展和维护应用程序。

  2. 代码重用:因为Struts框架已经提供了常用的功能模块,所以开发人员可以以最小的改动轻松扩展和重用应用程序的代码,从而节省了时间和精力。

  3. 减少错误:Struts框架强制执行一些最佳实践,例如分层体系结构和架构模式等,这些已被证明可以常规性的减少代码出错的机会。

  4. 使用广泛:由于Struts框架是一个开源框架,因此有许多开发人员和组织使用它,这使得它具有广泛的委员会和资源。

Struts框架的组成部分

Struts框架包含以下几个组成部分:

  1. 动作(Action):它是控制器层的组成部分,它处理客户端请求并呈现响应。Action通常由Java类实现,实现了Action接口。

  2. 系统分发器(Action Dispacher):系统分发器是将请求路由到适当的Action类的核心部分。一般情况下,请求可以路由到Action类的多个方法中,取决于请求的处理方式。

  3. 处理器(Processor):处理器用于处理请求和响应之间的交互。

  4. 标签库(Tag Library):Struts框架提供了许多标签库,使Web开发人员能够更轻松地生成HTML或XML。

Struts框架使用的MVC设计模式

Struts框架强烈支持使用MVC设计模式,因为它将应用程序分为三个互相分离的组件,使开发人员能够隔离代码,并使操作更加可预测和可测试。

以下是Struts框架中每个层次的工作:

  1. Model:Struts框架中的模型组件处理应用程序的数据模型部分。它是从底层操作细节中解脱出来的,以处理数据的概括。

  2. View:在Struts框架中,View是JavaServer Page(JSP)。JSP通过用户界面,将模型数据呈现给用户。

  3. Controller:在Struts框架中,controller由Action实现。Action负责决定什么逻辑是正确的操作。在Struts框架中,Action也处理数据验证以及在响应中收集数据。

Struts框架的使用

以下是Struts框架通过一个简单示例的使用:

  1. 准备工作:我们将需要Tomcat应用程序服务器、Struts框架的包以及JDK环境。

  2. 下载和安装:获取Struts框架的最新版本进行下载,然后将其解压。

  3. 创建Web应用程序:在Tomcat服务器的webapps目录下创建一个新的文件夹,例如“mystruts”,并在该文件夹中创建一个名为"WEB-INF"的文件夹。

  4. 包括必要的jar文件:复制Struts框架所需的所有JAR文件到项目的“WEB-INF / lib”文件夹中。

  5. 创建JSP文件:在项目的根目录下创建一个名为"index.jsp"的文件,我们将在此文件中定义如何呈现HTML表单。

<html>
<head></head>
<body>
  <form action="<s:property value='actionName'/>" method="post">
    <input type="text" name="userName"><br />
    <input type="password" name="password"><br />
    <input type="submit" value="Login">
  </form>
</body>
</html>
  1. 配置web.xml:在“mystruts / WEB-INF”目录中创建一个名为“web.xml”的文件,该文件保管以下Servlet:
<servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  <init-param>
    <param-name>config</param-name>
    <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>
  1. 创建struts-config.xml: 在“mystruts / WEB-INF”目录中创建一个名为“struts-config.xml”的文件,配置如下所示:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">

<struts-config>
  <form-beans>
    <form-bean name="loginForm" type="com.mystruts.LoginForm"/>
  </form-beans>

  <action-mappings>
    <action path="/login" type="com.mystruts.LoginAction" name="loginForm" validate="true" scope="request">
      <forward name="success" path="/success.jsp"/>
      <forward name="failure" path="/failure.jsp"/>
    </action>
  </action-mappings>
</struts-config>
  1. 创建Java Bean: 创建一个名为“LoginForm.java”的Java文件,用于在登陆页面上获取表单字段的值,定义如下:
public class LoginForm extends ActionForm {
  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;
  }
}
  1. 创建Action类: 创建一个名为 “LoginAction.java”的Java文件,定义如下:
public class LoginAction extends Action {
  public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception {
    LoginForm loginForm = (LoginForm) form;
    String userName = loginForm.getUserName();
    String password = loginForm.getPassword();

    if(userName.equals("admin") && password.equals("admin")) {
      return mapping.findForward("success");
    } else{
      return mapping.findForward("failure");
    }
  }
}

以上步骤创建了一个最基本的Struts应用程序,其中用户登录表格数据被传递到LoginAction,并执行后台逻辑。如果用户已输入正确的用户名和密码,则应用程序将跳转到成功页面,否则将跳转到失败页面。

Struts框架使用时的常见问题

在使用Struts框架时,可能会遇到以下常见问题:

  1. Struts框架的体系结构较为复杂,对于初学者而言需要花费一些额外的时间来学习和理解它的每个组成部分。

  2. Struts框架不能同时处理多个请求,因为它是同步的。

  3. Struts框架的响应时间较长,因为其集成了许多必要的组件,例如输入验证和HTTP请求处理。

总结

Struts框架是一个常用的MVC框架,可以使开发人员更专注于Java Web应用程序的实现,而不必花费大量时间在开发基础结构和处理细节上。该框架支持MVC架构模式,并提供了标签库和拦截器的概念,以便将端到端的业务逻辑处理加入到应用程序中。

通过以上示例,我们可以看到,使用Struts框架可以轻松构建Java Web应用程序,在此过程中仅需要少量的时间和功夫。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Java的Struts框架以及相关的MVC设计理念 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 23种设计模式(8) java外观模式

    23种设计模式(8) Java外观模式 一、什么是外观模式? 外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供一个一致的接口,使得这个子系统更加容易被使用。 外观模式又称为门面模式,顾名思义,就是像房屋门面一样,将一个复杂的系统或一组类的接口封装起来,提供一个更加简单、易用的接口,使得外部用户通过这个接口就能够完成庞杂…

    Java 2023年5月24日
    00
  • SpringBoot集成Kafka 配置工具类的详细代码

    下面是详细讲解SpringBoot集成Kafka配置工具类的完整攻略。 1、前置要求 在进行SpringBoot集成Kafka之前,需要准备以下环境: Java JDK 8及以上版本 Maven构建工具 Kafka集群及对应的Zookeeper集群 2、添加依赖 在进行SpringBoot集成Kafka之前,需要在pom.xml中添加以下依赖: <de…

    Java 2023年5月20日
    00
  • SSH框架网上商城项目第9战之添加和更新商品类别功能实现

    SSH框架网上商城项目第9战之添加和更新商品类别功能实现 本文介绍了如何实现网上商城项目中添加和更新商品类别的功能。我们使用SSH框架来开发此项目。在本文中,您将学习如何创建商品类别的实体类、DAO层、Service层和Action层,以及如何在网页中使用JavaScript和JQuery实现实时验证和提交表单。 创建商品类别的实体类 为了在数据库中存储商品…

    Java 2023年6月15日
    00
  • Hibernate中5个核心接口知识点整理

    当我们使用Hibernate进行数据库操作时,会经常接触到如下5个核心接口: SessionFactory Session Transaction Query Criteria 它们分别是什么,有何作用?下面我们进行详细讲解。 SessionFactory SessionFactory是Hibernate的核心接口之一,通常也是Hibernate启动过程中的…

    Java 2023年5月19日
    00
  • 一文详解Object类和抽象类

    一文详解Object类和抽象类 什么是Object类 在Java中,所有的类都是继承自Object类的。Object类是Java语言中的根类,它是所有类的父类,也就是Java中的类都会隐式继承自Object类。在Object类中,定义了几个常用的方法,如: public String toString(): 返回对象的字符串表示。 public boolea…

    Java 2023年5月26日
    00
  • 一篇文章带你深入了解Java线程池

    一篇文章带你深入了解Java线程池 什么是线程池? 线程池是一个线程队列管理器,大大提高了多线程的处理效率。在开发中使用线程池可以避免多次创建和销毁线程带来的性能开销,提高程序的稳定性和性能表现。 Java中的线程池 Java中的线程池是由ThreadPoolExecutor和Executors来实现的,其中Executors是一个线程池的工厂类,提供了很多…

    Java 2023年5月18日
    00
  • Mybatis之动态sql标签的使用

    那么首先我们先讲一下什么是Mybatis的动态sql标签。动态sql标签可以根据传递的参数生成不同的SQL查询语句,提供更加灵活的查询方式。相对于其他ORM框架,Mybatis的动态sql标签有独特的实现方式。那么接下来我们来看看如何使用Mybatis的动态sql标签。 判断语句标签<if> 我们可以使用<if>标签来进行条件判断。例…

    Java 2023年5月20日
    00
  • Java知识点归纳总结

    Java知识点归纳总结攻略 确定归纳目标 Java是一门广泛应用于软件开发的编程语言,包含了众多的知识点,因此归纳总结Java知识点需要确定一个明确的目标和范围。可以从以下方面入手: Java基础知识 面向对象编程 Java集合框架 多线程编程 数据库编程 网络编程 Spring框架 确定知识点的重要性和难度 不同的知识点在开发中的重要性和难度是不同的,因此…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部