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

相关文章

  • Spring Date jpa 获取最新一条数据的实例代码

    接下来我将为您详细讲解如何在Spring Data JPA中获取最新一条数据的实例代码攻略。 1.使用@OrderBy实现按照指定字段排序,并取第一条数据 首先,我们可以使用@OrderBy注解对实体类中的某一个字段进行排序,并通过limit函数取得第一条记录。 @Entity @Table(name = "product") publi…

    Java 2023年5月20日
    00
  • Java 数组元素倒序的三种方式(小结)

    下面是我对“Java 数组元素倒序的三种方式(小结)”这篇文章的详细讲解。 前言 文章初步介绍了Java中实现数组元素倒序的三种方式,包含了反转、迭代以及集合的实现方式。接下来,我将详细地讲解这三种方式的实现过程和示例。 反转数组 反转数组是实现数组元素倒序最基本的方法,这种方式直接利用了Java提供的Arrays工具类中的reverse()方法来实现。下面…

    Java 2023年5月26日
    00
  • java 浅析代码块的由来及用法

    Java 浅析代码块的由来及用法 背景介绍 在Java中,代码块是一段静态或动态语句代码,在执行时会形成一个作用域。根据代码块的位置和声明方式,可以分为实例初始化块、静态初始化块和局部代码块。 实例初始化块 实例初始化块是被定义在类内部,但没有被声明为静态的代码块,可以在创建对象时被调用,用于对对象进行初始化操作。 public class Person {…

    Java 2023年5月30日
    00
  • Java如何获取指定目录文件列表

    获取指定目录文件列表是 Java 编程中常见的操作之一,可以通过 Java 的 File 类来实现。下面是获取指定目录文件列表的完整攻略: 第一步:创建 File 对象 首先需要创建一个 File 对象来表示要获取的目录。File 对象可以接受一个目录路径作为参数,例如: File directory = new File("path/to/dir…

    Java 2023年5月20日
    00
  • Java语言实现扫雷游戏(1)

    “Java语言实现扫雷游戏(1)”是一篇介绍如何使用Java语言编写扫雷游戏的文章。主要分为以下几个步骤: 1. 创建项目 创建一个Java项目,并定义扫雷游戏需要的类和方法。常用的类包括: Mine(扫雷格子) MineField(扫雷地图) MineSweeper(扫雷游戏主类) 2. 实现扫雷格子 定义Mine类,包含以下属性: isMine:格子中是…

    Java 2023年5月26日
    00
  • springboot前端传参date类型后台处理的方式

    下面我会详细讲解如何在Spring Boot项目中处理前端传参的date类型。通常情况下,前端传参的date类型是字符串形式,而后台需要将其转化为Java的Date类型,并进行进一步的操作或存储。具体的步骤如下: 1. 在前端页面将日期转化为字符串 在前端页面上,我们需要将日期类型转化为字符串,一般使用JavaScript的Date对象的toISOStrin…

    Java 2023年5月20日
    00
  • Spring Security学习之rememberMe自动登录的实现

    下面我会给出详细的攻略,分为以下步骤: 添加pom依赖 配置Remember-me 编写HTML页面 编写Controller 运行测试 下面我会对每个步骤进行详细的讲解: 1. 添加pom依赖 在pom.xml中添加Spring Security和Spring Web的依赖。示例pom.xml文件如下: <dependencies> <d…

    Java 2023年5月20日
    00
  • 详解Java前缀树Trie的原理及代码实现

    详解Java前缀树(Trie)的原理及代码实现,下面是完整攻略: 1. 前缀树(Trie)的原理 前缀树,又叫字典树,是一种以树形结构来存储查询词条或单词的查找树。它的根节点不包含字符,每一个代表字符串中一个字符的节点内包含一个字符,从根节点到某一个节点的路径上经过的字符串连接起来即为该节点表示的字符串。 前缀树的查询通常是从根节点开始,根据查询词的字符在树…

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