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…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
