Struts2基础入门(有源码)

本文介绍Struts2框架的基础知识,包括下载安装、体系结构、操作流程及首个示例项目搭建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                         目标:

理解Struts的体系结构
掌握Struts的基本用法

1. Struts简介
      Struts是前身是由CraigR.McClanahan编写的JSPModel2架构之Application Framework源码贡献给Apache基金会,因此也成为现在Apache Jakarta项目中的Struts Framework。Apache Jakarta项目中除了Struts还包括Tomcat、Ant和Velocity等。
      当建立一个建筑物时,建筑工程师会设计好建筑物的支柱,为每一层的建筑提供支撑。软件工程师设计一个软件项目时,同样也要先设计好软件的支柱,这里我们可以用Struts来做为软件项目的支柱。Struts的目的是帮助减少在开发过程中使用MVC设计模型带来的应用时间,Struts将为软件开发过程减少许多繁琐的过程。
      Struts2是一个用于创建企业级Java Web应用程序的可扩展框架,该框架的目的是简化整个开发周期,从建设、部署和维护应用程序。Struts2的原名WebWork2。经过几年独立开发,WebWork和Struts社区联手创建Struts2。这个新版本的Struts使用更简单。
2. Struts下载
      Struts官网下载地址是http://jakarta.apache.org/ ,选择“Ex-Jakarta” 项目下的“ Struts”超连接,进入到Struts的下载界面,在界面的左侧有一个菜单栏,如下图:

      选择“Documentation”下的Struts版本,此处下载最新的Struts 2.2.1.1(GA),进入到下载界面,如下图:

    现在点击“Download Now” 进入Struts的下载界面,该界面中会有所Struts版本的下载选项,此处只下载Struts2.2.1.1,看下图:(此处还有另外两个下载选项“Get Started”和“Plugin Registry”,可以根据自己的需要选择相应的项。)

      此处建议下载“struts-2.2.1.1-all.zip”,下载该zip文档将Struts的源码、API文档、jar包以及实例全部下载完成。下载完后,如下图:

3. Struts体系结构
      Struts的体结构图如下:

      框架中分为三个部分:模型、控制器和视图。
      在Struts框架中,模型分为两个部分:1.系统的内部状态;2.可以改变状态的业务逻辑。内部状态通常由Bean表示。根据设计或应用程序的复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要的时候才获取数据。大型应用程序通常在方法内部封装业务逻辑(操作),这些方法可以被拥有状态信息的Bean调用。比如购物车Bean,它拥有用户购买商品的信息,可能还有checkOut()方法用来检查用户的信用卡,并向仓库发定货信息。
      小型程序中,操作可能会被内嵌在Action类,它是struts框架中控制器角色的一部分。当逻辑简单时这个方法很适合。建议用户将业务逻辑(要做什么)与Action类所扮演的角色(决定做什么)分开。
      视窗:由JSP建立,struts包含扩展自定义标签库,可以简化创建完全国际化用户界面的过程。
      控制器:struts中,基本的控制器组件是ActionServlet类中的实例Servelt,实际使用的Servlet在配置文件中由一组映射(由Action Mapping类进行描述)进行定义。

4. Struts的操作流程
      Struts的操作流程图如下:

      服务器启动后,根据web.xml加载Action Servlet读取struts.xml文件内容到内存。以登陆为例:第一次进login.jsp会先实例化FormBean、把默认值赋给表单元素。
      输入用户名密码提交表单、提交到action属性的login.do,通过ActionServlet读struts.xml文件找到action下的path属性找到.do,通过name属性找form-beans中的form-bean的name属性得到ActionForm的包名类名,先实例化form,把表单的值填充给form,调用form的validate方法验证、ActionErrors返回null表示验证通过,否则失败返回input指定的页面。验证通过会实例化Action,执行Action的excute方法。

5. 第一个Struts
       第一步:建项目并加载Struts2包。
       使用Eclipse建立一个Dynamic Web Project项目,将下载的Struts文件夹中lib目录下的几个jar文件,拷贝放置到项目WebContent文件夹WEB-INF文件夹lib目录下,要拷贝的jar文件项目图如下:

      第二步:WEB项目中安装Struts2。
      Struts2采用的是过滤器,所以先在web.xml文件中配置一个Filter,web.xml配置文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  	<display-name>NetJavaStruts</display-name>
<!-- 在WEB项目中安装Struts2 -->
  	<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>
<welcome-file-list>
	    <welcome-file>index.html</welcome-file>
	    <welcome-file>index.htm</welcome-file>
	    <welcome-file>index.jsp</welcome-file>
	    <welcome-file>default.html</welcome-file>
	    <welcome-file>default.htm</welcome-file>
	    <welcome-file>default.jsp</welcome-file>
  	</welcome-file-list>
</web-app>

      第三步:编写Action

package sample;
import com.opensymphony.xwork2.ActionSupport;
/**
 * 定义一个Login的Action类,该类继承自ActionSupport类
 * Struts2中,Action类已经和FormBean类集成到一起。
 * @author 熊向军
 */
public class Login extends ActionSupport{
	//定义一个私有的字符串类型的账号属性
	private String username;
	//定义一个私有的字符串类型的密码属性
	private String password;

	/**
	 * 设置账号属性的方法
	 * @param username是要从界面上接受的参数值
	 */
	public void setUsername(String username){
		//测试输出
		//System.out.println(username);
		this.username = username;
	}

	/**
	 * 获取账号属性值的方法
	 * @return 返回账号属性的值username
	 */
	public String getUsername(){
		return username;
	}

	/**
	 * 设置密码属性的方法
	 * @param password是要从界面上接受的参数值
	 */
	public void setPassword(String password){
		//测试输出
		//System.out.println(password);
		this.password = password;
	}

	/**
	 * 获取密码属性值的方法
	 * @return 返回账号属性的值password
	 */
	public String getPassword(){
		return password;
	}

	/**
	 * 这是Action类的执行方法,所有从客户端发送到LoginAction的请求都将有该方法处理。
	 * @return 会返回执行后要显示的结果,该结果在sample.xml文件中已经配置好,对应的是<action>标记中<result>标记的name属性。
	 */
	public String execute() throws Exception{
		//验证账号和密码是否不为null或者账号和密码长度大于0,如果成立则返回到执行成功的页面,如果失败则返回登录页面
		if(validator(getUsername()) && validator(getPassword())){
			//System.out.println("===>");
			//返回值对应<result>标记name属性的值
			return "view_Success";
		}else{
			//System.out.println("--->");
			//返回值对应<result>标记name属性的值
			return "view_Login";
		}
	}

	/**
	 * 验证账号和密码是否为空
	 * @param value表示的是账号值或者密码值
	 * @return 返回验证后的结果,如果验证为真,则返回TRUE,否则返回FALSE
	 */
	public boolean validator(String value){
		//System.out.println(">>>>>>>>>>>>>>>"+value);
		boolean state = false;
		//如果账号和密码为null或者小于等于0,则返回FALSE,反之返回TRUE。
		if(null != value && value.length() > 0)
			state = true;
		return state;
	}
}

 

      Struts2已经将Action类和FormBean类整合到一起了,所以,此处将在Action类中,定义FormBean;先定义两个私有的属性username和password,分别添加它们的getter和setter方法;再定义一个验证username和password是否为null和长度是否为0的validator方法;再重写execute()方法,该方法是执行,不能缺少哦!并在方法中调用验证方法。

      第四步:编写Struts.xml
      在Eclipse中必须自己去建立xml文件,先在NetJavaStruts项目的src目录下建立一个XML文件,文件的名字是struts.xml,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是根元素 -->
<struts>
	<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
	<constant name="struts.devMode" value="false"/>
	<!-- 加载配置文件 -->
	<include file="sample.xml"/>
</struts>

       <struts>标签是Struts2配置的根元素;<constant>标签表示设置常量;<include>标签表示加载配置;Struts2提供的一个特殊标签,可以允许开发人员将配置文件分散开来,这样就不会导致一个配置文件中写N多配置信息,有助于管理;建议采用这种方式来开发,属性file表示要加载的配置文件名。

      第五步:编写Struts配置信息
      在src目录下建立一个example.xml的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是根元素-->
<struts>
	<package name="sample" namespace="/sample" extends="struts-default">
		<action name="validator" class="sample.Login">
			<result name="view_Success">/main.jsp</result>
			<result name="view_Login">/login.jsp</result>
		</action>
	</package>
</struts>

      在<struts>标签中可以定义多个<package>标签,<package>标签是用来设置包的;name属性表示包的名字,可以被其他的package通过该名字引用;namespace表示命名空间,类似于Servlet的请求路径,当然此处也是设置的请求路径;extends表示该配置文件继承自哪里,默认使用的是(大部分使用的都是)struts-default。在<package>标签下也可以有多个<action>标签,<action>标签是用来设置每一个动作请求的;name属性用来表示该动作的名字,class表示该动作所对应的类是哪一个。<action>标签下可以有多个<result>标签,每一个标签对应一个处理后结果要显示的页面,切记name属性中的值要和Action类中的返回的值一一对应。
      Struts2中除了绝对配置,还可以使用其他的配置方式:

 

<!-- name指定action工作单元的名字为Login_*,*号表示只要是以Login_开头的都将由该工作单元匹配;
		method表示用哪个方法来处理,此处{1}将由动作名来的方法来处理;
		class是指定该工作单元所指定的类全路径 -->
		<action name="Login_*" method="{1}" class="example.Login">
			<!-- name表示要返回值的是input,如果返回input,则由/example/Login.jsp来显示 -->
			<result name="input">/example/Login.jsp</result>
			<!-- type表示将执行Action,此处执行Menu名字的Action -->
			<result type="redirectAction">Menu</result>
		</action>
		<!-- name指定action工作单元的名字为*,*号表示匹配所有的;
		class是指定该工作单元所指定的类全路径 -->
		<action name="*" class="example.ExampleSupport">
			<!-- 表示将由动作名所对应的*.jsp来显示结果 -->
			<result>/example/{1}.jsp</result>

 
     第六步:编写JSP
     JSP页面有三个,分别如下:

index.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="refresh" content="0;url=login.jsp">
<title>第一个Struts2示例</title>
</head>
<body>
<h3>加载中...</h3>
</body>
</html>
说明:Mete标签的http-equiv属性中的refresh表示刷新的意思,content属性中的第一个参数0,表示间隔0秒就开始刷新,url就表示刷新后要跳转的页面是login.jsp
login.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>第一个Struts2示例</title>
</head>
<body>
<h3>用户登录</h3>
<s:form action="sample/validator.action">
	<s:textfield name="username" label="账号"></s:textfield>
	<s:password name="password" label="密码"></s:password>
	<s:submit value="登录"></s:submit>
</s:form>
</body>
</html>
说明:此页面中使用了Struts2带的标签库,这一行代码是引入Struts2的标签库<%@ taglib prefix="s" uri="/struts-tags" %>;红色边框中的内容是关于Struts2标签的使用方式。
main.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>第一个Struts2示例</title>
</head>
<body>
<h1><s:property value="username"/></h1>
</body>
</html>
说明:此页面中使用了Struts2标签库的property标签,value属性中的名字,必须要在Action中存在该属性,否则无法显示其结果。

      到这里就已经成功了完成了第一个Struts2示例,此处使用的版本是Struts 2.2.1.1,看到这里了,就该你开工动手了,享受最后出来的成果吧!嘿嘿!

      index.html页面运行的结果如下图:

       login.jsp页面运行的结果如下图:

       main.jsp页面运行的结果如下图:

       在学习的时候,建议到官网上,下载完整的zip文档,然后参考里边的几个示例,这样上手会比较快。当然,如果你的英文更好,可以直接看官方提供的文档,我的英语不是很好所以有点麻烦,嘿嘿!就先到这里了!

【基于QT的调色板】是一个使用Qt框架开发的色彩选择工具,类似于Windows操作系统中常见的颜色选取器。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动和嵌入式设备,支持C++和QML语言。这个调色板功能提供了横竖两种渐变模式,用户可以方便地选取所需的颜色值。 在Qt中,调色板(QPalette)是一个关键的类,用于管理应用程序的视觉样式。QPalette包含了一系列的颜色角色,如背景色、前景色、文本色、高亮色等,这些颜色可以根据用户的系统设置或应用程序的需求进行定制。通过自定义QPalette,开发者可以创建具有独特视觉风格的应用程序。 该调色板功能可能使用了QColorDialog,这是一个标准的Qt对话框,允许用户选择颜色。QColorDialog提供了一种简单的方式来获取用户的颜色选择,通常包括一个调色板界面,用户可以通过滑动或点击来选择RGB、HSV或其他色彩模型中的颜色。 横渐变取色可能通过QGradient实现,QGradient允许开发者创建线性或径向的色彩渐变。线性渐变(QLinearGradient)沿直线从一个点到另一个点过渡颜色,而径向渐变(QRadialGradient)则以圆心为中心向外扩散颜色。在调色板中,用户可能可以通过滑动条或鼠标拖动来改变渐变的位置,从而选取不同位置的颜色。 竖渐变取色则可能是通过调整QGradient的方向来实现的,将原本水平的渐变方向改为垂直。这种设计可以提供另一种方式来探索颜色空间,使得选取颜色更为直观和便捷。 在【colorpanelhsb】这个文件名中,我们可以推测这是与HSB(色相、饱和度、亮度)色彩模型相关的代码或资源。HSB模型是另一种常见且直观的颜色表示方式,与RGB或CMYK模型不同,它以人的感知为基础,更容易理解。在这个调色板中,用户可能可以通过调整H、S、B三个参数来选取所需的颜色。 基于QT的调色板是一个利用Qt框架和其提供的色彩管理工具,如QPalette、QColorDialog、QGradient等,构建的交互式颜色选择组件。它不仅提供了横竖渐变的色彩选取方式,还可能支持HSB色彩模型,使得用户在开发图形用户界面时能更加灵活和精准地控制色彩。
标题基于Spring Boot的二手物品交易网站系统研究AI更换标题第1章引言阐述基于Spring Boot开发二手物品交易网站的研究背景、意义、现状及本文方法与创新点。1.1研究背景与意义介绍二手物品交易的市场需求和Spring Boot技术的适用性。1.2国内外研究现状概述当前二手物品交易网站的发展现状和趋势。1.3论文方法与创新点说明本文采用的研究方法和在系统设计中的创新之处。第2章相关理论与技术介绍开发二手物品交易网站所涉及的相关理论和关键技术。2.1Spring Boot框架解释Spring Boot的核心概念和主要特性。2.2数据库技术讨论适用的数据库技术及其在系统中的角色。2.3前端技术阐述与后端配合的前端技术及其在系统中的应用。第3章系统需求分析详细分析二手物品交易网站系统的功能需求和性能需求。3.1功能需求列举系统应实现的主要功能模块。3.2性能需求明确系统应满足的性能指标和安全性要求。第4章系统设计与实现具体描述基于Spring Boot的二手物品交易网站系统的设计和实现过程。4.1系统架构设计给出系统的整体架构设计和各模块间的交互方式。4.2数据库设计详细阐述数据库的结构设计和数据操作流程。4.3界面设计与实现介绍系统的界面设计和用户交互的实现细节。第5章系统测试与优化说明对系统进行测试的方法和性能优化的措施。5.1测试方法与步骤测试环境的搭建、测试数据的准备及测试流程。5.2测试结果分析对测试结果进行详细分析,验证系统是否满足需求。5.3性能优化措施提出针对系统性能瓶颈的优化建议和实施方案。第6章结论与展望总结研究成果,并展望未来可能的研究方向和改进空间。6.1研究结论概括本文基于Spring Boot开发二手物品交易网站的主要发现和成果。6.2展望与改进讨论未来可能的系统改进方向和新的功能拓展。
1. 用户与权限管理模块 角色管理: 学生:查看个人住宿信息、提交报修申请、查看卫生检查结果、请假外出登记 宿管人员:分配宿舍床位、处理报修申请、记录卫生检查结果、登记晚归情况 管理员:维护楼栋与房间信息、管理用户账号、统计住宿数据、发布宿舍通知 用户操作: 登录认证:对接学校统一身份认证(模拟实现,用学号 / 工号作为账号),支持密码重置 信息管理:学生完善个人信息(院系、专业、联系电话),管理员维护所有用户信息 权限控制:不同角色仅可见对应功能(如学生无法修改床位分配信息) 2. 宿舍信息管理模块 楼栋与房间管理: 楼栋信息:名称(如 "1 号宿舍楼")、层数、性别限制(男 / 女 / 混合)、管理员(宿管) 房间信息:房间号(如 "101")、户型(4 人间 / 6 人间)、床位数量、已住人数、可用状态 设施信息:记录房间内设施(如空调、热水器、桌椅)的配置与完好状态 床位管理: 床位编号:为每个床位设置唯一编号(如 "101-1" 表示 101 房间 1 号床) 状态标记:标记床位为 "空闲 / 已分配 / 维修中",支持批量查询空闲床位 历史记录:保存床位的分配变更记录(如从学生 A 调换到学生 B 的时间与原因) 3. 住宿分配与调整模块 住宿分配: 新生分配:管理员导入新生名单后,宿管可按专业集中、性别匹配等规则批量分配床位 手动分配:针对转专业、复学学生,宿管手动指定空闲床位并记录分配时间 分配结果公示:学生登录后可查看自己的宿舍信息(楼栋、房间号、床位号、室友列表) 调整管理: 调宿申请:学生提交调宿原因(如室友矛盾、身体原因),选择意向宿舍(需有空位) 审批流程:宿管审核申请,通过后执行床位调换,更新双方住宿信息 换宿记录:保存调宿历史(申请人、原床位、新床位、审批人、时间) 4. 报修与安全管理模块 报修管理: 报修提交:学生选择宿舍、设施类型(如 "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值