Struts2 快速入门
Struts2 是一个基于 MVC 设计模式的 Java Web 应用程序框架,它可以帮助我们更加有效地开发 Web 应用程序。Struts2 采用了前端控制器模式,通过核心控制器 DispatchServlet 将所有请求进行集中处理,然后将请求分发到指定的 Action 中,最后交给 View 进行展示。
Struts2 提供了许多可重用的组件和标记库,它可以帮助我们更加快速和方便地编写 Web 应用程序。Struts2 还提供了许多丰富的功能,例如表单验证、国际化、文件上传等。
常见的 Web 层框架
除了 Struts2,Java 中还有许多常见的 Web 层框架,例如:
- Spring MVC:Spring MVC 是一个基于 Spring 框架的 Web 框架,它提供了许多与 Spring 集成的功能,例如 AOP、IOC 等。Spring MVC 也是一个 MVC 设计模式的框架,它使用 DispatcherServlet 来控制请求的分发。
- JSF:JavaServer Faces(JSF)是一个基于组件的框架,它使用面向对象的技术来创建 Web 应用程序。JSF 通过标签库和表单组件来处理用户界面的开发。
- Play:Play 是一个基于 Java 和 Scala 的 Web 应用程序框架,它使用了反应式编程模型和函数式编程模型。Play 提供了许多有用的功能,例如自动重载、RESTful API 等。
- Wicket:Apache Wicket 是一个基于组件的 Web 应用程序框架,它使用面向对象的编程技术来创建可重用的组件。Wicket 提供了许多有用的功能,例如 AJAX、表单验证等。
Struts2 快速入门
接下来我们将介绍如何快速入门 Struts2。
创建一个页面编写一个 Action
首先,我们需要创建一个 JSP 页面。在 webapp
目录下创建一个名为 index.jsp
的文件,文件内容如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Hello World Example</title>
</head>
<body><h1>Hello World</h1><form action="hello"><input type="text" name="name"/><input type="submit" value="Say Hello"/></form>
</body>
</html>
在 JSP 页面中,我们创建了一个表单,该表单将用户的名字作为参数传递给 hello
Action。
接下来,我们需要创建一个 Action,用于处理表单提交的请求。在 src
目录下创建一个名为 HelloAction.java
的文件,文件内容如下:
package com.example;public class HelloAction {private String name;public String execute() throws Exception {return "success";}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
在 Action 中,我们声明了一个 name
属性,用于保存用户输入的名字。在 execute()
方法中,我们返回了一个字符串 "success"
,该字符串将被用于查找对应的结果视图。
配置核心过滤器
在 web.xml
文件中添加以下配置:
<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
上述配置将 Struts2 核心过滤器添加到 Web 应用程序中,该过滤器将负责处理所有的请求,并将请求分发到相应的 Action 中。
修改 struts.xml
在 src
目录下创建一个名为 struts.xml
的文件,文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""<http://struts.apache.org/dtds/struts-2.0.dtd>">
<struts><package name="default" extends="struts-default"><action name="hello" class="com.example.HelloAction"><result name="success">/hello.jsp</result></action></package>
</struts>
上述配置文件指定了一个名为 default
的包,该包继承了 Struts2 默认包。在 default
包中,我们定义了一个名为 hello
的 Action,该 Action 使用了 com.example.HelloAction
类作为实现。当请求匹配到 hello
Action 时,该 Action 将返回名为 success
的视图 /hello.jsp
。
Struts2 的开发流程分析
Struts2 的开发流程如下:
- 创建 JSP 页面,将用户的请求提交给指定的 Action。
- 创建 Action 类,实现请求的处理逻辑。
- 在
struts.xml
中定义 Action 的映射规则。 - 在
struts.xml
中定义结果视图。
Struts2 的常见配置
在 Struts2 中,我们可以通过配置文件 struts.xml
来完成各种配置。例如,我们可以通过以下配置来启用国际化:
<constant name="struts.custom.i18n.resources" value="global"/>
上述配置指定了一个名为 global
的资源文件,该资源文件包含了所有需要国际化的字符串。
另外,我们还可以通过以下配置来启用表单验证:
<bean type="com.opensymphony.xwork2.validator.ValidationInterceptor" name="validation"><interceptor-ref name="defaultStack"/>
</bean>
上述配置将 ValidationInterceptor
添加到 Struts2 的拦截器栈中,该拦截器将负责处理所有的表单验证请求。
Struts2 的优势
相对于其它的 Web 框架,Struts2 具有以下的优势:
- 易于学习:Struts2 的代码结构非常清晰,易于理解和学习。它的文档也非常丰富,可以帮助我们更快地掌握它的使用方法。
- 高度可重用性:Struts2 提供了许多可重用的组件和标记库,可以帮助我们更加快速地编写 Web 应用程序。
- 丰富的功能:Struts2 提供了许多丰富的功能,例如表单验证、国际化、文件上传等,可以帮助我们更加方便地开发 Web 应用程序。
- 开放式扩展:Struts2 提供了许多接口和抽象类,可以方便地进行开放式扩展和定制。
结论
本文介绍了 Struts2 的基本概念、快速入门、开发流程和常见配置。通过学习本文,相信读者已经对 Struts2 有了更深入的了解。在实际开发中,我们可以根据需要选择合适的框架来进行开发,以提高开发效率和代码质量。
相关文章:
Struts2 快速入门
Struts2 是一个基于 MVC 设计模式的 Java Web 应用程序框架,它可以帮助我们更加有效地开发 Web 应用程序。Struts2 采用了前端控制器模式,通过核心控制器 DispatchServlet 将所有请求进行集中处理,然后将请求分发到指定的 Action 中ÿ…...
关于PullToRefreshView下拉刷新失效问题
一、问题原因 昨天,突然一个问题丢在了我的头上,用户反馈说某某界面下拉刷新不好使啊,怎么回事。二话不说直接运行项目,经过测试,发现果然不好使。一看代码提交日期好家伙2020年,百思不得其解,…...
JAVA开发中的六大原则
JAVA开发中的六大原则,也被称为SOLID原则,是软件开发中常用的一组设计原则。这些原则提供了实现高质量、易于维护和可扩展软件的基本策略。 以下是JAVA开发中的六大原则以及它们的详细说明: 单一职责原则(Single Responsibility…...
Matplotlib 安装
Matplotlib 安装 本章节,我们使用 pip 工具来安装 Matplotlib 库,如果还未安装该工具,可以参考python 怎么使用pip进行包管理。 安装 matplotlib 库: pip install matplotlib 安装完成后,我们就可以通过 import 来…...

CF - Li Hua and Pattern
题意:给出了矩阵,里面每个位置分为蓝色或红色(数据上用1和0体现了),给出了一个操作次数,每次可以改变一个坐标的颜色,问能否通过操作使得图像旋转180度后不变。 解:很容易想到&…...

重磅!阿里云云原生合作伙伴计划全新升级:加码核心权益,与伙伴共赢新未来
在今天的 2023 阿里云合作伙伴大会上,阿里云智能云原生应用平台运营&生态业务负责人王荣刚宣布: “阿里云云原生合作伙伴计划”全新升级。他表示: 云原生致力于帮助企业客户最大限度的减轻运维工作,更好的实现敏捷创新&#x…...

OSCP-Escape(gif绕过)
目录 扫描 WEB 扫描 sudo nmap 192.168.233.113 -p- -sS -sVPORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.29 ((Ubuntu)) 8080/tcp open http Apache…...

iMazing2023最新免费版iOS设备管理软件
iMazing是一款功能强大的iOS设备管理软件,它可以帮助用户备份和管理他们的iPhone、iPad或iPod Touch上的数据。除此之外,它还可以将备份数据转移到新的设备中、管理应用程序、导入和导出媒体文件等。本文将详细介绍iMazing的功能和安全性,并教…...
Git上传文件代码到GitHub
删除线上git:删除GitHub仓库里的文件夹_阿巴资源站的博客-CSDN博客 1. 创建空文件夹 2. cd 到本文件夹 3. git init ,初始化,在本地创建一个Git仓库 4. 同时按住“ Command Shift . ”三个按键,即可查看当下文件夹中的隐藏文件 5. 克隆…...

JavaScript概述二(Date+正则表达式+Math+函数+面向对象)
1.Date 1.1 new一个Date对象表示当前系统时间 var nownew Date(); console.log(now);1.2 根据传入的时间格式表示时间 var date1new Date(2023-4-20 00:16:40); console.log(date1); 1.3 传入时间毫秒数,返回从1900年1月1日8时(东八区)X分X…...
一个朋友弄来的,太牛了,特别是后面内容,不看不知道,一看吓一跳,电话,热线
一个朋友弄来的,太牛了,特别是后面内容,不看不知道,一看吓一跳,我也收藏一下: 工商银行 95588 建设银行 95533 农业银行 95599 中国银行 95566 交通银行 95559 浦发银行 95528 民生银行 95568 兴业银行 955…...

VGA协议实践
文章目录 前言一、VGA接口定义与传输原理1、VGA接口定义2、传输原理3、不同分辨率对应不同参数 二、Verilog编程1、VGA显示彩色条纹2、VGA显示字符3、输出一幅彩色图像4、Quartus操作1、添加PLL核2、添加ROM核 三、全部代码四、总结五、参考资料 前言 VGA的全称是Video Graphi…...

毕业5年的同学突然告诉我,他已经是年薪30W的自动化测试工程师....
作为一名程序员,都会对自己未来的职业发展而焦虑。一方面是因为IT作为知识密集型的行业,知识体系复杂且知识更新速度非常快,“一日不学就会落后”。 另外一方面,IT又是劳动密集型的行业,不仅业人员多,而且个…...

操作系统原理 —— 进程有哪几种状态?状态之间如何切换?(七)
进程的五种状态 首先我们一起来看一下进程在哪些情况下,会有不同的状态表示。 创建态、就绪态 当我们刚开始运行程序的时候,操作系统把可执行文件加载到内存的时候,进程正在被创建的时候,它的状态是创建态,在这个阶…...

可算是熬出头了,测试4年,费时8个月,入职阿里,涨薪14K
前言 你的努力,终将成就无可替代的自己。 本科毕业后就一直从事测试的工作,和多数人一样,最开始从事点点点的工作,看着自己的同学一步一步往上走,自己还是在原地踏步,说实话这不是自己想要的状态。 一年半…...

5款十分小众的软件,知道的人不多但却很好用
今天推荐5款十分小众的软件,知道的人不多,但是每个都是非常非常好用的,有兴趣的小伙伴可以自行搜索下载。 1.视频直播录制——OBS Studio OBS Studio可以让你轻松地录制和直播你的屏幕、摄像头、游戏等内容。你可以使用OBS Studio来创建多种…...

Linux驱动开发:uboot启动流程详解
前言:uboot作为Linux驱动开发的 “三巨头” 之一,绝对是一座绕不开的大山。当然,即使不去细致了解uboot启动流程依旧不影响开发者对uboot的简单移植。但秉持着知其然知其所以然的学习态度,作者将给读者朋友细致化的过一遍uboot启动…...

分治与减治算法实验: 排序中减治法的程序设计
目录 前言 实验内容 实验目的 实验分析 实验过程 流程演示 写出伪代码 实验代码 代码详解 运行结果 总结 前言 本文介绍了算法实验排序中减治法的程序设计。减治法是一种常用的算法设计技术,它通过减少问题的规模来求解问题。减治法可以应用于排序问题&…...

leetcode两数、三数、四数之和
如有错误,感谢不吝赐教、交流 文章目录 两数之和题目方法一:暴力两重循环(不可取)方法二:HashMap空间换时间 三数之和题目方法一:当然是暴力破解啦方法二:同两数之和的原理,借助Has…...

使用Docker部署wikitten个人知识库
使用Docker部署wikitten个人知识库 一、wikitten介绍1.wikitten简介2.wikitten特点 二、本地实践环境介绍三、本地环境检查1.检查Docker服务状态2.检查Docker版本 四、部署wikitten个人知识库1.创建数据目录2.下载wikitten镜像3.创建wikitten容器4.查看wikitten容器状态5.检查w…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
文章目录 一、开启慢查询日志,定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...