当前位置: 首页 > news >正文

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 的开发流程如下:

  1. 创建 JSP 页面,将用户的请求提交给指定的 Action。
  2. 创建 Action 类,实现请求的处理逻辑。
  3. struts.xml 中定义 Action 的映射规则。
  4. 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 应用程序框架&#xff0c;它可以帮助我们更加有效地开发 Web 应用程序。Struts2 采用了前端控制器模式&#xff0c;通过核心控制器 DispatchServlet 将所有请求进行集中处理&#xff0c;然后将请求分发到指定的 Action 中&#xff…...

关于PullToRefreshView下拉刷新失效问题

一、问题原因 昨天&#xff0c;突然一个问题丢在了我的头上&#xff0c;用户反馈说某某界面下拉刷新不好使啊&#xff0c;怎么回事。二话不说直接运行项目&#xff0c;经过测试&#xff0c;发现果然不好使。一看代码提交日期好家伙2020年&#xff0c;百思不得其解&#xff0c;…...

JAVA开发中的六大原则

JAVA开发中的六大原则&#xff0c;也被称为SOLID原则&#xff0c;是软件开发中常用的一组设计原则。这些原则提供了实现高质量、易于维护和可扩展软件的基本策略。 以下是JAVA开发中的六大原则以及它们的详细说明&#xff1a; 单一职责原则&#xff08;Single Responsibility…...

Matplotlib 安装

Matplotlib 安装 本章节&#xff0c;我们使用 pip 工具来安装 Matplotlib 库&#xff0c;如果还未安装该工具&#xff0c;可以参考python 怎么使用pip进行包管理。 安装 matplotlib 库&#xff1a; pip install matplotlib 安装完成后&#xff0c;我们就可以通过 import 来…...

CF - Li Hua and Pattern

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

重磅!阿里云云原生合作伙伴计划全新升级:加码核心权益,与伙伴共赢新未来

在今天的 2023 阿里云合作伙伴大会上&#xff0c;阿里云智能云原生应用平台运营&生态业务负责人王荣刚宣布&#xff1a; “阿里云云原生合作伙伴计划”全新升级。他表示&#xff1a; 云原生致力于帮助企业客户最大限度的减轻运维工作&#xff0c;更好的实现敏捷创新&#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设备管理软件&#xff0c;它可以帮助用户备份和管理他们的iPhone、iPad或iPod Touch上的数据。除此之外&#xff0c;它还可以将备份数据转移到新的设备中、管理应用程序、导入和导出媒体文件等。本文将详细介绍iMazing的功能和安全性&#xff0c;并教…...

Git上传文件代码到GitHub

删除线上git:删除GitHub仓库里的文件夹_阿巴资源站的博客-CSDN博客 1. 创建空文件夹 2. cd 到本文件夹 3. git init &#xff0c;初始化&#xff0c;在本地创建一个Git仓库 4. 同时按住“ Command Shift . ”三个按键&#xff0c;即可查看当下文件夹中的隐藏文件 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 传入时间毫秒数&#xff0c;返回从1900年1月1日8时&#xff08;东八区&#xff09;X分X…...

一个朋友弄来的,太牛了,特别是后面内容,不看不知道,一看吓一跳,电话,热线

一个朋友弄来的&#xff0c;太牛了&#xff0c;特别是后面内容&#xff0c;不看不知道&#xff0c;一看吓一跳&#xff0c;我也收藏一下&#xff1a; 工商银行 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的自动化测试工程师....

作为一名程序员&#xff0c;都会对自己未来的职业发展而焦虑。一方面是因为IT作为知识密集型的行业&#xff0c;知识体系复杂且知识更新速度非常快&#xff0c;“一日不学就会落后”。 另外一方面&#xff0c;IT又是劳动密集型的行业&#xff0c;不仅业人员多&#xff0c;而且个…...

操作系统原理 —— 进程有哪几种状态?状态之间如何切换?(七)

进程的五种状态 首先我们一起来看一下进程在哪些情况下&#xff0c;会有不同的状态表示。 创建态、就绪态 当我们刚开始运行程序的时候&#xff0c;操作系统把可执行文件加载到内存的时候&#xff0c;进程正在被创建的时候&#xff0c;它的状态是创建态&#xff0c;在这个阶…...

可算是熬出头了,测试4年,费时8个月,入职阿里,涨薪14K

前言 你的努力&#xff0c;终将成就无可替代的自己。 本科毕业后就一直从事测试的工作&#xff0c;和多数人一样&#xff0c;最开始从事点点点的工作&#xff0c;看着自己的同学一步一步往上走&#xff0c;自己还是在原地踏步&#xff0c;说实话这不是自己想要的状态。 一年半…...

5款十分小众的软件,知道的人不多但却很好用

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

Linux驱动开发:uboot启动流程详解

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

分治与减治算法实验: 排序中减治法的程序设计

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

leetcode两数、三数、四数之和

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

使用Docker部署wikitten个人知识库

使用Docker部署wikitten个人知识库 一、wikitten介绍1.wikitten简介2.wikitten特点 二、本地实践环境介绍三、本地环境检查1.检查Docker服务状态2.检查Docker版本 四、部署wikitten个人知识库1.创建数据目录2.下载wikitten镜像3.创建wikitten容器4.查看wikitten容器状态5.检查w…...

文字修仙项目市场价值与商业化分析

文字修仙 AI Agent&#xff1a;市场价值与个人开发者商业化实战指南 一、文字修仙游戏的市场基本面——小众赛道的大机会 1.1 全球文字/互动叙事游戏市场规模与增长 1.2 中文修仙品类的独特生态&#xff1a;QQ群 → 微信 → 抖音 1.3 用户画像&#xff1a;谁在玩文字修仙&…...

对比直接使用厂商API体验Taotoken在多模型选型上的便利

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直接使用厂商API体验Taotoken在多模型选型上的便利 在开发基于大语言模型的应用时&#xff0c;一个常见的需求是尝试不同的模型…...

FICO创凭证标准错误:在折旧范围 01 中的业务与帐面净值规则冲突

凭证过账总金额等于资产剩余总价值创凭证出现如下错误&#xff1a;一、首先确认是否是业务配置问题排查业务问题操作如下&#xff1a;T-CODE:SPRO --->财务会计--->资产会计核算--->组织结构--->复制参考折旧表选折对应折旧表如果不一致设置为一致即可解决问题&…...

数采网关的应用与特点

摘要在工业自动化、智能制造和物联网&#xff08;IoT&#xff09;快速发展的背景下&#xff0c;数据采集网关&#xff08;数采网关&#xff09;作为连接现场设备与上层管理系统的关键枢纽&#xff0c;发挥着至关重要的作用。它能够实现工业设备数据的实时采集、协议转换、边缘计…...

商业设计复盘|法式肉制品包装升级逻辑:如何用视觉解决进口品牌本土化痛点

&#x1f4d6; 前言&#xff1a;肉制品行业的视觉同质化困境在快消品商业设计领域&#xff0c;高端肉制品、法式肉制品一直是极具代表性的细分赛道。随着消费升级&#xff0c;用户选购逻辑从“看价格、看食材”转变为看视觉、看透明化、看品牌调性。但纵观目前国内市场&#xf…...

RAG 检索到了还是答错:从一个线上事故讲透 RAG 数据工程全链路

一个合同问答系统的线上事故 某企业法务团队上线了一套合同问答系统。用户问&#xff1a;“渠道商季度返点的计算条件是什么&#xff1f;” 系统返回了三段参考文档&#xff0c;生成了一段看起来完整的回答。法务审核时发现&#xff1a;引用的是 2024 年旧版渠道政策&#xf…...

太顶了!输入主题,这几款AI论文软件自动生成毕业论文初稿!

毕业季论文焦虑&#xff1f;还在为选题、查资料、写大纲、润色修改熬夜到凌晨&#xff1f;别担心&#xff0c;现在只需输入主题&#xff0c;几款AI论文工具就能自动生成图文并茂的毕业论文初稿&#xff0c;从开题到定稿全流程搞定&#xff01;千笔AI、ThouPen、豆包、DeepSeek、…...

经手100万+终端后,聊聊校园门锁Sub-1G和Cat.1怎么选

做校园联网门锁项目的人大概都遇到过这个纠结&#xff1a;组网方案到底选Sub-1G还是4G Cat.1&#xff1f;我们团队&#xff08;KEENZY中科易安&#xff09;经手了100万在线终端的运行数据&#xff0c;可以明确地说——两种方案没有绝对的优劣&#xff0c;只有场景是否匹配。选错…...

Taotoken助力初创团队低成本管理多个AI项目API用量

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken助力初创团队低成本管理多个AI项目API用量 对于小型创业团队的技术负责人而言&#xff0c;同时推进多个AI项目是常态。每个…...

OpenClaw用户如何通过Taotoken扩展可用模型范围

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 OpenClaw用户如何通过Taotoken扩展可用模型范围 基础教程类&#xff0c;针对使用OpenClaw作为AI工作流工具的开发者&#xff0c;指…...