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

yizhihongxing

详解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日

相关文章

  • Java异常之图书管理系统

    现在我来给大家分享一下“Java异常之图书管理系统”的完整攻略。 1. 异常概述 异常是Java中用于处理错误和异常情况的一种机制。当程序发生异常时,可以通过异常处理机制将异常抛出并捕获,从而避免程序崩溃或者出现错误。 在Java中,异常是Throwable类及其子类的对象,其中最常见的异常分类包括:Checked Exception(编译时异常)和Unch…

    Java 2023年5月26日
    00
  • Java Thread 类和Runnable 接口详解

    Java Thread 类和 Runnable 接口详解 概述 Java 中的线程是并发编程的核心内容,可以同时执行多个任务。Java 提供了两种线程的方式:继承Thread类和实现Runnable接口。 Thread 类 Thread类是Java中的一个顶级类,使用它可以快速地创建并发程序。Java 程序中的 main() 方法也是一个线程,使用Threa…

    Java 2023年5月19日
    00
  • java算法入门之有效的括号删除有序数组中的重复项实现strStr

    下面我将详细讲解“java算法入门之有效的括号删除有序数组中的重复项实现strStr”的完整攻略。 1. 题目描述 这个问题由两部分组成。 1.1 删除有效的括号 给定一个括号字符串 s,删除尽可能多的括号,使得 s 合法,并返回删除后的字符串。 输入:s = “lee(t((c)o)de)”输出:”lee(t(c)o)de”解释:”lee(t(co)de)…

    Java 2023年5月26日
    00
  • 如何解决通过spring-boot-maven-plugin package失败问题

    通过spring-boot-maven-plugin package失败的原因可能有很多,比如Maven依赖包版本问题、插件配置错误、代码编译错误等等。这里给出一份完善的攻略,来帮助解决这个问题。 1. 确认Maven依赖包版本 首先检查pom.xml文件中Maven依赖包的版本号,确保所有依赖包版本号与项目需要的依赖包版本一致。如果版本不一致可能导致编译失…

    Java 2023年6月2日
    00
  • 一文解析Apache Avro数据

    一文解析Apache Avro数据 什么是Apache Avro? Apache Avro是一种数据序列化系统,它致力于解决不同语言之间数据交流的问题,通过提供透明、紧凑和高效的二进制数据格式,使得数据的传输和存储更加容易。它支持基于Web服务的远程过程调用(RPC)和大规模数据存储、处理系统的数据交换。 Avro基本概念 Schema Apache Avr…

    Java 2023年5月20日
    00
  • SSH框架网上商城项目第13战之Struts2文件上传功能

    下面就给您讲解一下“SSH框架网上商城项目第13战之Struts2文件上传功能”的完整攻略。 一、Struts2文件上传功能简介 Struts2文件上传功能是指在Struts2框架中,用户可以通过向服务器提交文件的方式来实现文件上传的功能。Struts2文件上传功能通常采用Apache Commons FileUpload库来实现,可以对上传的文件进行大小、…

    Java 2023年5月20日
    00
  • 详解如何通过Java实现压缩PDF文档

    我会详细讲解如何通过Java实现压缩PDF文档的完整攻略。 1. 背景介绍 PDF文件是常见的文档格式,在传输和存储时,通常需要进行压缩。使用Java程序实现PDF文件的压缩功能,在某些场景下是必不可少的。下面,将详细介绍如何使用Java实现对PDF文档的压缩。 2. 实现过程 2.1 准备工作 在开始实现压缩PDF文档功能之前,需要准备以下工具和环境: J…

    Java 2023年5月31日
    00
  • 详解Java数组的一维和二维讲解和内存显示图

    详解Java数组的一维和二维讲解和内存显示图 一维数组 一维数组是一种最简单的数组,它是一组相同类型的变量的有序集合。数组中的每个变量是一个元素,每个元素都有一个唯一的下标。 声明一维数组 声明一维数组的语法如下: type[] arrayName; 其中,type可以是Java中任何一种数据类型。下面是一个声明整数数组的例子: int[] numbers;…

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