初识Struts框架:入门指南

发布时间: 2023-12-18 22:50:10 阅读量: 31 订阅数: 16
# 一、 什么是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年送1年
点击查看下一篇
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年送1年
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )

最新推荐

【平滑迁移与升级】:Proxmox VE的无缝过渡与持续服务策略

![Proxmox VE中文手册](https://files.programster.org/tutorials/kvm/proxmox/storage-guide/storage-configurations.png) 参考资源链接:[Proxmox VE虚拟化平台详解:简易集群与Web管理](https://wenku.csdn.net/doc/6412b699be7fbd1778d474df?spm=1055.2635.3001.10343) # 1. Proxmox VE简介与核心功能 ## 1.1 Proxmox VE概述 Proxmox VE(Virtual Environm

【.NET Framework与第三方组件兼容性:避免头痛问题指南】:兼容性指南

![【.NET Framework与第三方组件兼容性:避免头痛问题指南】:兼容性指南](https://wsbctechnicalblog.github.io/images/configuration-and-or-dependency-management-4.png) 参考资源链接:[解决Win10安装.NET Framework 4.5.2时的高版本冲突问题](https://wenku.csdn.net/doc/1cwfjxgacp?spm=1055.2635.3001.10343) # 1. .NET Framework概述与第三方组件的重要性 ## 1.1 .NET Frame

【LR-TB2000光学原理深度剖析】:光学特性全面理解与应用

![【LR-TB2000光学原理深度剖析】:光学特性全面理解与应用](https://i0.hdslb.com/bfs/article/d49936bb5f489cbd8840254e002d28daf32e51b9.png) 参考资源链接:[LR-TB2000系列激光传感器安全使用手册](https://wenku.csdn.net/doc/6412b5e7be7fbd1778d44ce8?spm=1055.2635.3001.10343) # 1. LR-TB2000光学原理概述 在这一章节中,我们将为读者提供关于LR-TB2000光学原理的概括性理解。LR-TB2000是应用了复杂光

AD9959高速数据传输设计要点:关键因素与实施策略

参考资源链接:[AD9959:中文详解与调制功能指南](https://wenku.csdn.net/doc/6401abd6cce7214c316e9b04?spm=1055.2635.3001.10343) # 1. AD9959概述与高速数据传输重要性 在现代电子工程领域,数据传输速度和效率是衡量系统性能的关键指标。AD9959作为一款高速、高性能的数字频率合成器,在多种应用场合中扮演着至关重要的角色。本章节将概述AD9959的基本功能,同时深入探讨高速数据传输的重要性,并为接下来的章节内容奠定基础。 ## 1.1 AD9959基本功能 AD9959具备四个独立的频率合成器,每个通道

【PyTorch深度学习配置】:PyCharm环境优化深度指南

![【PyTorch深度学习配置】:PyCharm环境优化深度指南](https://img-blog.csdnimg.cn/06333c2dc1bd4e698bfb167f37ef5209.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iiq5rW3Xw==,size_20,color_FFFFFF,t_70,g_se,x_16) 参考资源链接:[Pycharm安装torch失败解决指南:处理WinError 126错误](https://wenku.csdn.n

模式分析指南:Lumerical-FDTD原理与应用详解

![Lumerical-FDTD](https://www.eecs.qmul.ac.uk/~yang/images/LHM_model.jpg) 参考资源链接:[Lumerical-FDTD Solutions中文教程:入门到高级详解](https://wenku.csdn.net/doc/nktii7nkp8?spm=1055.2635.3001.10343) # 1. Lumerical-FDTD软件概述 ## 1.1 软件简介 Lumerical-FDTD是业界著名的时域有限差分(Finite-Difference Time-Domain)方法仿真软件,专注于光子学与电磁仿真。由

【Star CCM热传导终极攻略】:理论基础+实战技巧全掌握

![Star CCM帮助教程](https://images.squarespace-cdn.com/content/v1/5fa58893566aaf04ce4d00e5/1610747611237-G6UGJOFTUNGUGCYKR8IZ/Figure1_STARCCM_Interface.png) 参考资源链接:[STAR-CCM+模拟教程:从入门到高级操作](https://wenku.csdn.net/doc/6412b461be7fbd1778d3f686?spm=1055.2635.3001.10343) # 1. 热传导理论基础 热传导是研究物质内部温度变化的一种物理过程,

【IOT固件更新】:远程升级的4大策略与实践指南

![【IOT固件更新】:远程升级的4大策略与实践指南](https://lembergsolutions.com/sites/default/files/styles/original_size_compressed/public/media/images/Body%20image_FOTA%20updates.jpg?itok=1V7G_tyl) 参考资源链接:[物联网入门:从特洛伊咖啡壶到智能生态构建](https://wenku.csdn.net/doc/12ucce8f4u?spm=1055.2635.3001.10343) # 1. IOT固件更新概念解析 ## 1.1 固件及其

非线性系统动态分析实战:如何构建系统模型与仿真技巧

![非线性系统习题解答](https://cdn.comsol.com/wordpress/2016/10/FitzHugh-Nagumo-model-app.png) 参考资源链接:[《非线性系统(第3版)》习题解答全集 by Hassan K. Khalil](https://wenku.csdn.net/doc/2wx9va6007?spm=1055.2635.3001.10343) # 1. 非线性系统动态分析基础 ## 1.1 什么是非线性系统? 在动态系统的领域,非线性系统区别于线性系统,表现出更为复杂的行为和响应。这些系统在输入与输出之间不存在比例关系,也就是说,系统的输出
最低0.47元/天 解锁专栏
买1年送1年
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )