初识Struts框架:入门指南

发布时间: 2023-12-18 22:50:10 阅读量: 40 订阅数: 19
# 一、 什么是Struts框架? ## a. Struts框架的简介 Struts框架是一个基于MVC(Model-View-Controller)设计模式的开源Web应用程序框架,它利用Java Servlets、JavaBean、资源文件等技术开发MVC架构的Web应用程序。Struts框架最初是由Jakarta项目组织开发并维护,现在由Apache软件基金会进行维护。Struts框架主要用于简化Java EE应用程序的开发过程,提供了一套标准的基于MVC的应用程序架构。 ## b. Struts框架的特点 1. **模块化管理**:Struts框架将应用程序划分为模型(Model)、视图(View)和控制器(Controller)三个部分,使开发人员可以将关注点分离,更好地管理应用程序。 2. **表单处理**:Struts框架提供了便捷的表单处理机制,可以轻松地完成数据验证、错误提示等操作。 3. **国际化支持**:Struts框架内建的资源文件支持多种不同语言的国际化应用。 4. **易于整合**:Struts框架可以与大多数的Java EE技术(如JSP、Servlet、EJB等)进行无缝整合。 5. **灵活配置**:Struts框架的配置文件遵循XML格式,易于配置和维护。 ## 二、 Struts框架的核心组件 a. 控制器(Controller):ActionServlet b. 视图层(View):JSP页面和标签库 c. 模型层(Model):FormBean和ActionForm d. 配置文件:struts-config.xml ### 三、 Struts框架的工作流程 Struts框架是一个基于MVC模式的Web应用程序开发框架,它主要包括控制器、视图和模型三大组件。在实际应用中,Struts框架的工作流程通常包括客户端发送请求、ActionServlet的处理流程、Action类的执行和返回结果给客户端这几个步骤。 #### a. 客户端发送请求 1. 客户端通过浏览器发送一个HTTP请求,该请求被Web服务器接收。 2. Web服务器将请求交给配置好的Servlet容器,对于Java Web应用来说,通常是Tomcat。 3. 在web.xml文件中,配置了将所有请求交给Struts的ActionServlet处理,所以请求会被定位到ActionServlet。 #### b. ActionServlet的处理流程 1. ActionServlet首先会查找struts-config.xml配置文件,找到与请求对应的Action映射。 2. 根据映射找到对应的Action类,创建Action实例。 3. ActionServlet会创建一个ActionContext对象,用于封装本次请求的信息,然后将其传递给Action。 #### c. Action类的执行 1. Action接收ActionContext对象,根据请求信息处理业务逻辑,并进行相应的数据处理。 2. 在Action中进行必要的验证、数据处理等操作。 3. Action返回一个表示执行结果的ActionForward对象,其中包括要跳转的页面以及可能需要传递的数据。 #### d. 返回结果给客户端 1. ActionServlet接收ActionForward对象,进行页面跳转或数据传递。 2. 最终结果经过View层(通常是JSP页面)的处理和呈现,通过Web服务器返回给客户端浏览器。 ### 四、 编写第一个Struts应用程序 在这一节中,我们将详细介绍如何编写第一个Struts应用程序。我们将从配置web.xml文件开始,然后编写struts-config.xml配置文件,接着创建Action类和FormBean类,并最终进行JSP页面的编写。 #### a. 配置web.xml文件 首先,我们需要在web.xml文件中配置Struts的核心控制器ActionServlet。以下是web.xml文件的配置示例: ```xml <web-app> <!-- 其他配置 --> <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> <!-- 其他配置 --> </web-app> ``` 在上面的配置中,我们定义了一个名为action的servlet,并指定了ActionServlet的类路径为org.apache.struts.action.ActionServlet。同时,通过`<init-param>`标签配置了Struts的主要配置文件路径为/WEB-INF/struts-config.xml。最后,使用`servlet-mapping`将*.do的请求映射到action servlet。 #### b. 编写struts-config.xml配置文件 接下来,我们需要创建struts-config.xml文件,并在其中配置Struts应用程序的相关组件,包括Action映射、FormBean配置、全局转发等。以下是一个简单的struts-config.xml配置示例: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <!-- 配置Action映射 --> <action-mappings> <action path="/login" type="com.example.LoginAction" name="loginForm" scope="request"> <forward name="success" path="/success.jsp"/> <forward name="error" path="/error.jsp"/> </action> <!-- 其他 action 配置 --> </action-mappings> <!-- 配置全局转发 --> <global-forwards> <forward name="login" path="/login.jsp"/> </global-forwards> <!-- 配置全局异常处理 --> <global-exceptions> <exception key="app.error" type="com.example.AppException" path="/error.jsp"/> </global-exceptions> </struts-config> ``` 在上面的配置中,我们定义了一个名为/login的Action映射,指定了对应的Action类为com.example.LoginAction,同时配置了FormBean和视图页面的转发路径。此外,我们还配置了全局转发和全局异常处理,以确保整个应用程序的一致性。 #### c. 创建Action类和FormBean类 接下来,我们需要创建一个名为LoginAction的Action类,以及与之对应的FormBean类。其中,Action类负责接收用户请求、处理业务逻辑并返回结果,而FormBean类则负责接收和验证用户输入数据。以下是一个简单的Action类和FormBean类示例: ```java // LoginAction.java package com.example; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.*; public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { LoginForm loginForm = (LoginForm) form; String username = loginForm.getUsername(); String password = loginForm.getPassword(); // 执行登录逻辑,验证用户名密码 if (验证通过) { return mapping.findForward("success"); } else { return mapping.findForward("error"); } } } // LoginForm.java package com.example; import org.apache.struts.action.ActionForm; public class LoginForm extends ActionForm { private String username; private String password; // getter和setter方法 // 表单验证逻辑 } ``` 在上面的示例中,LoginAction类继承自org.apache.struts.action.Action类,重写了execute方法处理用户的登录请求。同时,LoginForm类继承自org.apache.struts.action.ActionForm类,用于接收用户提交的登录表单数据。 #### d. 编写JSP页面 最后,我们需要编写相应的JSP页面来呈现用户界面,并与Action类和FormBean类交互。以下是一个简单的登录页面示例: ```html <!-- login.jsp --> <html> <head> <title>Login Page</title> </head> <body> <form action="login.do" method="post"> Username: <input type="text" name="username"><br> Password: <input type="password" name="password"><br> <input type="submit" value="Login"> </form> </body> </html> <!-- success.jsp --> <html> <head> <title>Login Success</title> </head> <body> <h1>Welcome, ${username}!</h1> </body> </html> <!-- error.jsp --> <html> <head> <title>Login Error</title> </head> <body> <h1>Login failed. Please try again.</h1> </body> </html> ``` 在上面的示例中,我们创建了login.jsp用于用户登录,以及success.jsp和error.jsp用于展示登录成功和失败的页面。同时我们使用了Struts的EL表达式`${username}`来显示用户登录成功后的用户名。 ### 五、 Struts框架中的表单验证和数据转换 表单验证和数据转换在Web应用开发中是非常重要的一环,它可以确保用户输入的数据符合预期并且可以正确地被处理。在Struts框架中,我们可以使用Validator插件来进行表单验证,同时也可以进行数据转换和类型转换。 #### a. 使用Validator插件进行表单验证 Validator插件是Struts框架中用于表单验证的重要组件,它可以帮助我们定义和执行验证规则,确保用户提交的数据合法有效。下面是一个简单的示例,演示如何在Struts框架中使用Validator插件进行表单验证: ```java // 注意: 在这里说明,因为python代码不支持Struts2框架,我在这里使用了java代码示例,实际代码应用中需要根据具体情况来编写。 // 定义Action类 public class LoginAction extends Action { private String username; private String password; // 省略其他属性和方法 // 验证方法 public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if (username == null || username.trim().equals("")) { errors.add("username", new ActionError("error.username.required")); } if (password == null || password.trim().equals("")) { errors.add("password", new ActionError("error.password.required")); } return errors; } } // 在struts-config.xml中配置Validator插件 <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /> </plug-in> // 假设在validation.xml中定义了验证规则,例如: <form name="loginForm"> <field property="username" depends="required"> <arg key="error.username.required" /> </field> <field property="password" depends="required"> <arg key="error.password.required" /> </field> </form> ``` #### b. 数据转换和类型转换 除了表单验证,Struts框架还提供了数据转换和类型转换的功能,可以帮助我们将用户提交的数据转换成合适的类型,或者进行自定义的数据转换操作。以下是一个简单的示例,演示如何在Struts框架中进行数据转换: ```java // 定义Action类 public class UserAction extends Action { private int userId; private Date birthday; // 省略其他属性和方法 // 数据转换方法 protected void populateForm(HttpServletRequest request) { userId = Integer.parseInt(request.getParameter("userId")); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { birthday = sdf.parse(request.getParameter("birthday")); } catch (ParseException e) { e.printStackTrace(); } } // 省略其他方法 } ``` 在上述示例中,我们可以看到如何在Action类中进行数据转换,将字符串类型的参数转换成int和Date类型。这样可以确保在接收用户提交的数据时能够正确地处理并转换成我们需要的数据类型。 ### 六、 Struts框架中的扩展和高级特性 在Struts框架中,除了基本的MVC架构和表单验证功能外,还有一些扩展和高级特性,可以提高开发效率和系统的可维护性。以下是一些常见的扩展和高级特性: #### a. 使用Tiles进行页面布局 Tiles是一个用于构建页面布局的框架,它可以将一个页面划分为多个部分,并且可以在不同的页面中重用这些部分。在Struts框架中,可以通过Tiles将页面模板、头部、底部等部分进行组合,减少重复代码的编写,提高页面的维护性和可复用性。 ```java // 示例代码 <definition name="baseLayout" template="/WEB-INF/template/layout.jsp"> <put name="title" value="Welcome to My Website" /> <put name="header" value="/WEB-INF/template/header.jsp" /> <put name="menu" value="/WEB-INF/template/menu.jsp" /> <put name="body" value="/WEB-INF/template/body.jsp" /> <put name="footer" value="/WEB-INF/template/footer.jsp" /> </definition> ``` #### b. 使用Interceptor进行权限控制 Interceptor是Struts2框架中的一个重要特性,它可以在Action执行的前后进行拦截和处理。通过Interceptor,可以实现权限控制、日志记录、性能监控等功能,有效地对用户请求进行管理和控制。 ```java // 示例代码 public class AuthInterceptor extends AbstractInterceptor { public String intercept(ActionInvocation invocation) throws Exception { // 在此处进行权限验证和控制 // ... return invocation.invoke(); } } ``` #### c. 使用Struts2进行升级 Struts2是Struts框架的升级版本,它采用了更加灵活和优雅的设计,提供了更多的特性和功能,包括拦截器栈、OGNL表达式、标签库等,能够更好地支持现代化的Web开发需求。因此,如果需要更强大的功能和更好的开发体验,可以考虑将现有的Struts框架升级到Struts2。
corwn 最低0.47元/天 解锁专栏
买1年送3月
点击查看下一篇
profit 百万级 高质量VIP文章无限畅学
profit 千万级 优质资源任意下载
profit C知道 免费提问 ( 生成式Al产品 )

相关推荐

李_涛

知名公司架构师
拥有多年在大型科技公司的工作经验,曾在多个大厂担任技术主管和架构师一职。擅长设计和开发高效稳定的后端系统,熟练掌握多种后端开发语言和框架,包括Java、Python、Spring、Django等。精通关系型数据库和NoSQL数据库的设计和优化,能够有效地处理海量数据和复杂查询。
专栏简介
该专栏《Struts框架》是一系列文章集,旨在帮助读者全面了解和掌握Struts框架。首先,通过《初识Struts框架:入门指南》,读者将获得Struts框架的基本概念和背景知识。随后,《Struts框架基础:配置与组件详解》将深入解析Struts框架的配置文件和核心组件,为读者提供深入理解框架的基础。紧接着,《Struts框架入门实例:构建简单的Web应用》通过实例演示,引导读者从零开始构建起一个简单的Web应用,让读者实践中理解框架的实际应用。接下来的《Struts框架的表单处理与验证》将介绍在Struts框架中如何有效地处理和验证表单数据,保证应用的安全性和正确性。最后,《Struts框架中的国际化与本地化:实践与原理》则深入探讨Struts框架中的国际化和本地化特性,帮助读者了解并运用该特性实现多语言支持。通过该专栏,读者将全面了解Struts框架的基础知识和实际应用技巧,为他们在Web开发中更好地运用Struts框架打下坚实基础。
最低0.47元/天 解锁专栏
买1年送3月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )

最新推荐

解决组合分配难题:偏好单调性神经网络实战指南(专家系统协同)

![解决组合分配难题:偏好单调性神经网络实战指南(专家系统协同)](https://media.licdn.com/dms/image/D5612AQG3HOu3sywRag/article-cover_image-shrink_600_2000/0/1675019807934?e=2147483647&v=beta&t=4_SPR_3RDEoK76i6yqDsl5xWjaFPInMioGMdDG0_FQ0) # 摘要 本文旨在探讨解决组合分配难题的方法,重点关注偏好单调性理论在优化中的应用以及神经网络的实战应用。文章首先介绍了偏好单调性的定义、性质及其在组合优化中的作用,接着深入探讨了如何

WINDLX模拟器案例研究:3个真实世界的网络问题及解决方案

![WINDLX模拟器案例研究:3个真实世界的网络问题及解决方案](https://www.simform.com/wp-content/uploads/2017/08/img-1-1024x512.webp) # 摘要 本文对WINDLX模拟器进行了全面概述,并深入探讨了网络问题的理论基础与诊断方法。通过对比OSI七层模型和TCP/IP模型,分析了网络通信中常见的问题及其分类。文中详细介绍了网络故障诊断技术,并通过案例分析方法展示了理论知识在实践中的应用。三个具体案例分别涉及跨网络性能瓶颈、虚拟网络隔离失败以及模拟器内网络服务崩溃的背景、问题诊断、解决方案实施和结果评估。最后,本文展望了W

【FREERTOS在视频处理中的力量】:角色、挑战及解决方案

![【FREERTOS在视频处理中的力量】:角色、挑战及解决方案](https://cdn.educba.com/academy/wp-content/uploads/2024/02/Real-Time-Operating-System.jpg) # 摘要 FreeRTOS在视频处理领域的应用日益广泛,它在满足实时性能、内存和存储限制、以及并发与同步问题方面面临一系列挑战。本文探讨了FreeRTOS如何在视频处理中扮演关键角色,分析了其在高优先级任务处理和资源消耗方面的表现。文章详细讨论了任务调度优化、内存管理策略以及外设驱动与中断管理的解决方案,并通过案例分析了监控视频流处理、实时视频转码

ITIL V4 Foundation题库精讲:考试难点逐一击破(备考专家深度剖析)

![ITIL V4 Foundation题库精讲:考试难点逐一击破(备考专家深度剖析)](https://wiki.en.it-processmaps.com/images/3/3b/Service-design-package-sdp-itil.jpg) # 摘要 ITIL V4 Foundation作为信息技术服务管理领域的重要认证,对从业者在理解新框架、核心理念及其在现代IT环境中的应用提出了要求。本文综合介绍了ITIL V4的考试概览、核心框架及其演进、四大支柱、服务生命周期、关键流程与功能以及考试难点,旨在帮助考生全面掌握ITIL V4的理论基础与实践应用。此外,本文提供了实战模拟

【打印机固件升级实战攻略】:从准备到应用的全过程解析

![【打印机固件升级实战攻略】:从准备到应用的全过程解析](https://m.media-amazon.com/images/I/413ilSpa1zL._AC_UF1000,1000_QL80_.jpg) # 摘要 本文综述了打印机固件升级的全过程,从前期准备到升级步骤详解,再到升级后的优化与维护措施。文中强调了环境检查与备份的重要性,并指出获取合适固件版本和准备必要资源对于成功升级不可或缺。通过详细解析升级过程、监控升级状态并进行升级后验证,本文提供了确保固件升级顺利进行的具体指导。此外,固件升级后的优化与维护策略,包括调整配置、问题预防和持续监控,旨在保持打印机最佳性能。本文还通过案

【U9 ORPG登陆器多账号管理】:10分钟高效管理你的游戏账号

![【U9 ORPG登陆器多账号管理】:10分钟高效管理你的游戏账号](https://i0.hdslb.com/bfs/article/banner/ebf465f6de871a97dbd14dc5c68c5fd427908270.png) # 摘要 本文详细探讨了U9 ORPG登陆器的多账号管理功能,首先概述了其在游戏账号管理中的重要性,接着深入分析了支持多账号登录的系统架构、数据流以及安全性问题。文章进一步探讨了高效管理游戏账号的策略,包括账号的组织分类、自动化管理工具的应用和安全性隐私保护。此外,本文还详细解析了U9 ORPG登陆器的高级功能,如权限管理、自定义账号属性以及跨平台使用

【编译原理实验报告解读】:燕山大学案例分析

![【编译原理实验报告解读】:燕山大学案例分析](https://img-blog.csdnimg.cn/img_convert/666f6b4352e6c58b3b1b13a367136648.png) # 摘要 本文是关于编译原理的实验报告,首先介绍了编译器设计的基础理论,包括编译器的组成部分、词法分析与语法分析的基本概念、以及语法的形式化描述。随后,报告通过燕山大学的实验案例,深入分析了实验环境、工具以及案例目标和要求,详细探讨了代码分析的关键部分,如词法分析器的实现和语法分析器的作用。报告接着指出了实验中遇到的问题并提出解决策略,最后展望了编译原理实验的未来方向,包括最新研究动态和对

【中兴LTE网管升级与维护宝典】:确保系统平滑升级与维护的黄金法则

![中兴LTE网管操作](http://blogs.univ-poitiers.fr/f-launay/files/2021/06/Figure11.png) # 摘要 本文详细介绍了LTE网管系统的升级与维护过程,包括升级前的准备工作、平滑升级的实施步骤以及日常维护的策略。文章强调了对LTE网管系统架构深入理解的重要性,以及在升级前进行风险评估和备份的必要性。实施阶段,作者阐述了系统检查、性能优化、升级步骤、监控和日志记录的重要性。同时,对于日常维护,本文提出监控KPI、问题诊断、维护计划执行以及故障处理和灾难恢复措施。案例研究部分探讨了升级维护实践中的挑战与解决方案。最后,文章展望了LT

故障诊断与问题排除:合泰BS86D20A单片机的自我修复指南

![故障诊断与问题排除:合泰BS86D20A单片机的自我修复指南](https://www.homemade-circuits.com/wp-content/uploads/2015/11/ripple-2.png) # 摘要 本文系统地介绍了故障诊断与问题排除的基础知识,并深入探讨了合泰BS86D20A单片机的特性和应用。章节二着重阐述了单片机的基本概念、硬件架构及其软件环境。在故障诊断方面,文章提出了基本的故障诊断方法,并针对合泰BS86D20A单片机提出了具体的故障诊断流程和技巧。此外,文章还介绍了问题排除的高级技术,包括调试工具的应用和程序自我修复技术。最后,本文就如何维护和优化单片
最低0.47元/天 解锁专栏
买1年送3月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )