通过实例学习Struts2 - 从struts-blank开始 (1)

Struts2开发包/struts-2.3.24.1/apps/struts2-blank 有些人不知道Struts2开发包/apps/struts2-blank怎么解压 用WinRAR其实是可以解压成功的 邮件打开方式里里面选择WinRAR压缩文件管理器为默认打开方式就可以解压了 还是不行的话就下载我上传的这个吧 立即下载

最近发现一些网站在Copy&Paste我的文章, 请尊重我的劳动成果,在转载的时候注明出处,谢谢。

前言

一直用Struts1 , 现在新的项目要转向Struts2了, 先研究学习一下,做点技术储备。

我一直认为计算机软件行业是一个实践性非常强的行业,书读了多少都不管用, 一定要卷起袖子,亲自动手,才能学到一门技术的精髓,才能谈得上精通。

否则浮在表面,只懂概念,夸夸奇谈,一进入真正的项目就傻眼了。

但是自己完全从零开始来学习一个技术还是太慢了,一定要找到一个切入点, 就像打仗一样,集中优势兵力,从一点突破,向纵深发展,迂回包抄,各个歼灭。

这个切入点就是优秀的源代码, 看看大牛们是怎么做的,然后模仿学习,能极大的减少你学习的时间。

现在市面上有很多讲Struts2的书籍,Struts2权威, 大全,指南, 鱼龙混杂, 我的观点是先不要急着读他们,先找一本小册子了解一下基本知识,然后找优秀的Struts2项目代码学习, 在学习思考,不仅仅要知道What, How, 要多问自己几个Why , 假想一下如果让你去设计,你会怎么做,然后和Struts 的设计思想对比, 这样才能真正的提高。

至于那些“权威/大全/指南” , 我更多的会用来查找技术细节,作为参考书。


基于这个思路, 先在网上搜索了一本InfoQ的书 <<深入浅出Struts2>> , 还凑合,很快就能翻完,建立了一个基本印象。

至于优秀的Struts2项目代码,没有找到合适的,决定拿struts2 中自带的应用来研究学习,毕竟是官方出品,差不到哪儿去。

哪位同学知道更好的使用Struts2的项目源码,请不吝赐教。


建立环境

废话说了这么多,赶紧开工

先来准备环境:
1. 从Struts2官网下载源码: http://struts.apache.org/release/2.1.x/, 写这篇文章的时候版本是struts-2.3.15.1, 注意下载那个Full Distribution, 会包含源码和例子
2. 开发工具当然少不了, 从http://www.eclipse.org/downloads/ 下载一个 “Eclipse IDE for Java EE Developers,”   这个版本可以和Web Server和 Application Server集成
3. 用Tomcat做Web服务器吧 : http://tomcat.apache.org/  ,我下载的版本是7.0.42


把下载的struts2 解压开,里边有个struts-2.3.15.1/apps  目录, 其中就是我们要的所有项目例子

这里的WAR包都是直接可以放到Tomcat中运行的,但是为了研究, 我们需要把它解开, 别告诉我你不知道怎么解压开WAR 文件啊 :-)

从名称来看struts2-blank.war最简单, 解压开大概是这个样子


启动Eclipse 启动,在Preferences -> Server -> Runtime Enviroment  中添加一个Apache Tomcat 7 的 Server runtime , 具体过程就不说了,相信各位同学都能轻松搞定


建立一个Dynamic Web project ,名称就叫做struts2-blank 吧,然后重要的步骤来了:

(1) 把上面图片中的所有文件都Copy到 新建项目的WebContent下, 如果Eclipse 提示是否覆盖文件的话,就选择“是”

(2) 然后把WEB-INF/src/java 下的所有文件都copy 到 struts-blank项目的 src 目录下 ------ 这是真正的源代码

(3) 删除WEB-INF/src 目录, 清空WEB-INF/classes 目录    ---- 这些目录没用了

最好系统长这个样子:


建立一个基于Tomcat7 的Server ,用来部署项目, 然后把struts2-blank 这个web 项目加到Server 中, 启动server , 就能看到tomcat server 在启动, 然后就是struts2 启动的log 了

在浏览器中运行 http://localhost:8080/struts2-blank/   就能看到最最简单的界面了:

看起来费了很大的劲, 实际上还是挺简单的, 之所以要建立一个Eclipse 环境,主要是为了看源代码方便。

对于Struts2自带的其他例子, 各位同学如法炮制即可

Struts2 blank project

终于可以开始看源码了, 首先引起我注意的就是struts.xml , 是直接放在Eclipse 项目的src 目录下,这就意味着运行时Eclipse 会自动把它copy到WEB-INF/classes 目录下, 和编译过的java class文件放在一起, 而在struts1 中,配置文件叫做struts-config.xml , 是直接放在WEB-INF 目录下的, 这是一个很大的区别。

打开这个文件瞧一瞧:

    <constant name="struts.devMode" value="true" />  <--- 肯定是指定开发模式

    <package name="default" namespace="/" extends="struts-default">

        <default-action-ref name="index" />  <--- 指定缺省的Action引用, 在下面定义
        <global-results>
            <result name="error">/error.jsp</result>  <--- Global result, Action的结果如果是error,就可以用这个result
        </global-results>

        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="error"/>  <--- 这个功能不错, 把所有的代码异常都映射到error这个result
        </global-exception-mappings>

        <action name="index">  
            <result type="redirectAction">  <--- 调用另外一个Action  : "/example/HelloWorld" ,  namespace其实指的就是url
                <param name="actionName">HelloWorld</param>
                <param name="namespace">/example</param>
            </result>
        </action>
    </package>

    <include file="example.xml"/>  <--- 不错,可以include 别的文件,模块化更好,更容易支持团队开发


顺藤摸瓜,再来看看example.xml
    <package name="example" namespace="/example" extends="default"> <---注意namespace是/example, 即这个package下面的所有action 调用都得这么写: 
                                                                    <---http://xxxx/structs-blank/example/xxxx

        <action name="HelloWorld" class="example.HelloWorld">   <--- 很明显, 这里的Action 实现类是HelloWorld, 可以猜测到,执行成功的话会调用
                                                                <--- HelloWorld.jsp
             <result>/example/HelloWorld.jsp</result>
        </action>

      ......
    </package>


赶紧瞄一眼HelloWorld.java
public class HelloWorld extends ExampleSupport {
    //毫无疑问,这个方法会被调用,设置一个消息的key (HelloWorld.message) 然后返回sucess, 
    //在package.properties中能看到Helloworld.message , 但是struts2到底是怎么调用它的呢?先别着急,
    //记下问题, 先看完整个流程再说
    public String execute() throws Exception {  
        setMessage(getText(MESSAGE));          
        return SUCCESS;                         
    }

    /**
     * Provide default valuie for Message property.
     */
    public static final String MESSAGE = "HelloWorld.message";

    /**
     * Field for Message property.
     */
    private String message;

    /**
     * Return Message property.
     *
     * @return Message property
     */
    public String getMessage() {
        return message;
    }

    /**
     * Set Message property.
     *
     * @param message Text to display on HelloWorld page.
     */
    public void setMessage(String message) {
        this.message = message;
    }
}

在HelloWorld.jsp中,有这么一句  <h2><s: property value=" message"/></h2>  , 可以猜测这里的message 应该和Action 中的getMessage()有关联, 要不然struts2如何拿到message 的值?

这样,基本的流程就走完了, 我们看到了struts2的Action定义是在struts.xml 中(以及其他被include的xml 文件), Action 的execute方法会被调用, jsp中可以引用Action中设置的属性的值。

好像还少了点什么东西, 对了,struts2到底是通过什么配置起作用的? 答案当然是在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>


和Struts1 不同, Struts2是用一个filter 来处理所有请求的。

如果你之前有struts2开发经验的话,可能会注意到这里使用的不是FilterDispatcher,而是StrutsPrepareAndExecuteFilter 。

这是因为对于Struts2的老版本,使用的是FilterDispatcher,对于2.1.3以上的版本,就开始使用StrutsPrepareAndExecuteFilter了

今天就到此为止吧, 明天再仔细看一下其他的分支。







struts2-blank.war struts2-blank空白struts2下载 立即下载

相关推荐

struts2-blank

自己搭建移动端服务器。

java struts2 例子_Struts2学习进阶(实例篇一)——struts2-blank-2.0.8实例学习

说明:本文经过笔者对struts2.0.8自带的实例struts2-blank-2.0.8学习而写,对该例子进行了部分修改,希望对广大象要学习struts2的朋友有所帮助。一.实例说明本例是Struts2的简单实例,通过本工程的学习,我们将会对struts2的表单以及表单验证有一个初步的认识、了解struts2的配置以及初探Struts2的本地化输出。二.编码准备1.包的引入在MyEclipse或...

weixin_29435115的博客 276

Struts2开发包struts2-blank-2.2.1

相当好用的Struts2开发包,是Eclipse开发环境下使用Struts2框架必不可少的开发包,下载后不用解压,直接打开,将相应的jar包拖放到web工程的web-inf/lib目录下就行!

struts2原文件struts2-blank.war学习

最近又在学习SSH框架,不间断的学习让自己对各个单独的框架又有了进一步的学习。现在学习的是struts2的源文件,在此和大家一起分享。(其实源文件才是我们学习一手资料呢!) 1.   首先下载struts-2.3.4.1-all.zip ,版本都可以。 2.   解压,打开,我们看到有apps,docs,lib,src四个文件夹,见名知意,我就不翻译了。这里我只看了apps里面的内

keep innocent 3163

struts2-blank-2.1.8.war

struts2-blank-2.1.8.war struts2-blank-2.1.8.war

关于VS2022创建winform窗体后择项或选择工具箱项加载visionPro控件卡住,窗口未响应解决方法

解决winform加载工具箱选择项卡死问题

xiaokiss_的博客 3210

【Struts2(一)】Strust2入门XML配置-action编写

1.1 案例需求 1.1.1 需求概述 CRM系统中有客户的显示的功能,效果如图: 我们实际的开发中会使用Struts2作为Web的架构  1.2 Struts2的概述 1.2.1 Struts2的概述 Struts是一种基于MVC模式的轻量级Web框架,它自问世以来,就受到了广大Web开发者的关注,并广泛应用于各种企业系统的开发中。目前掌握Struts框架几乎成为Web开发者的必...

风信子 4866

【Java】JAVA知识总结浅析

Java是一门功能强大的编程语言,广泛应用于多个领域。Java的编程思想,包括面向过程和面向对象编程,Java的发展历史,各版本的特点,JVM原理,数据类型,Java SE与Java EE的区别,应用场景,JDK与JDBC,Java Web技术,Spring Boot系列,以及MyBatis框架的基本实现,最后还将讨论Java在大数据、人工智能、嵌入式和Android等领域的应用。

wnm23的专栏 5220

Struts2学习进阶(实例篇一)——struts2-blank-2.0.8实例学习

说明:本文经过笔者对struts2.0.8自带的实例struts2-blank-2.0.8学习而写,对该例子进行了部分修改,希望对广大象要学习struts2的朋友有所帮助。一.             实例说明 本例是Struts2的简单实例,通过本工程的学习,我们将会对struts2的表单以及表单验证有一个初步的认识、了解struts2的配置以及初探Struts2的本地化输出。二. 

1138

戴尔笔记本装Ubuntu 20.04,别急着分区!先搞定这个BIOS设置(Intel RST避坑指南)

本文详细介绍了在戴尔笔记本上安装Ubuntu 20.04时遇到的Intel RST技术兼容性问题及解决方案。通过安全切换至AHCI模式,避免安装过程中找不到硬盘的常见问题,并提供双系统分区策略和安装后的优化建议,确保Ubuntu与Windows 10双系统稳定运行。

weixin_31315567的博客 269

别再死记硬背参数了!手把手教你用Fluent欧拉模型搞定流化床模拟(附颗粒粘度/体积分数设置详解)

本文深入解析Fluent欧拉模型在流化床模拟中的应用,重点讲解颗粒粘度和体积分数等关键参数的设置原理与科学方法。通过对比不同模型(如Syamlal-O'Brien、Gidaspow)的适用场景,帮助工程师摆脱参数死记硬背,实现精准模拟。内容涵盖相间作用机制、求解策略优化及结果验证,为化工、能源领域的流化床模拟提供实用指南。

weixin_42656416的博客 429

通过实例学习Struts2 - 从struts-blank开始 (2)

接上一篇 《一起学习Struts2 (1) 》 在Action中支持通配符 在example.xml 中,我们能看到这样的定义: Login_*" method="{1}" class="example.Login">             /example/Login.jsp             Menu   大胆的猜测一下,这个定义应该支持Login_exe

Be yourself and Beyond yourself 4438

机器学习实战4-教育领域:学生成绩的可视化分析与成绩预测-详细分析

大家好,我是微学AI,今天给大家带来机器学习实战4-学生成绩的可视化分析与成绩预测,机器学习在教育中的应用具有很大的潜力,特别是在学生成绩的可视化分析与成绩预测方面。机器学习可以通过对学生的父母教育情况和学校表现等数据进行分析和挖掘,从而揭示潜在的学习模式和趋势。

微学AI的博客 7677

通过实例学习Struts2 - 从struts-blank开始 (3)

接上一篇《通过实例学习Struts2 (2)》 国际化 国际化通俗点讲就是支持多语言,在Struts2中我们要解决两个问题 1. 如何告诉Struts2 当前的Locale 是什么 2. Struts2是如何寻找不同Locale的resource文件的 设置Locale 在我们的struts-blank 项目中,HelloWorld.jsp中有这样的代码: La

Be yourself and Beyond yourself 4045

30. 用GPT-4自动生成测试用例的完整流程

利用GPT - 4生成测试用例面临的主要问题包括:如何准确地将软件需求转化为GPT - 4能够理解的输入提示,以确保生成的测试用例覆盖所有关键功能;如何评估生成的测试用例的有效性和充分性;如何处理生成的测试用例中的错误或不合理之处;以及如何将生成的测试用例集成到现有的测试框架中。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 472

linux 基于debian/ubuntu AB系统适配(二)-updateEngine移植

其实A/B系统的原理很简单,大部分的工作都集中在uboot上,rootfs只是起到一个辅助的作用,但这个作用也就必不可少的。你会发现在这个其中并没有kernel的参与。

badbayyj的博客 1033

使用嵌入式jetty在Eclipse中部署struts2示例程序struts2-blank

使用内嵌jetty在Eclipse中部署struts2示例

yangkunlin的专栏 1352

【机器学习与数据挖掘实战 | 商务】案例03:基于k近邻算法的非侵入式电力负荷监测与分解的电力分析

本案例结合非侵入式电力负荷监测与分解的案例,重点介绍了在数据可视化的辅助下k近邻算法的应用。首先利用数据可视化寻找数据的特征,构建特征集合。然后构建k近邻模型,利用构建的特征集合训练模型,接着利用该模型对单一设备所属类别进行判定,最后计算实时用电量。

Morse_Chen的博客 2303

struts-2.3.4.1自带示例程序struts2-blank.war的入门学习(高手绕行)

一直没用过大名鼎鼎的Struts2,网上找了很多示例程序,总是不尽人意。下载完struts-2.3.4.1,简单浏览了一下目录结构,突然想到,不如用下载包中自带的示例程序进行学习,保证是最新的Struts2,而且示例较权威。以下是我的学习步骤,写出来供初学者参考,struts大牛如果有时间看的话,也希望能够提一些宝贵的意见。 [b]1.[/b] 首先到http://struts.apache...

曾经以为…… 322

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

struts2初步学习路线

1,下载官网的struts2的程序包,下载那个all的包: http://struts.apache.org/download.cgi#struts233-SNAPSHOT 2,eclipse中新建一个web project工程,设置其中的相关参数: java jdk设置; server-tomcat的设置; 3,解压struts2包:struts-2.3.1.2-all.zip ,获得...

weixin_33733810的博客 137

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

MQTT over QUIC:移动弱网下如何让IoT长连接不再掉线

在物联网通信中,TCP长连接在移动切网和弱网环境下容易因IP变化而断开,导致设备离线、消息延迟。QUIC协议通过连接迁移和0-RTT机制,在传输层实现了连接身份与网络路径的解耦,能在网络切换后快速恢复会话,减少重连等待。MQTT over QUIC将这些特性与MQTT的会话恢复、QoS机制结合,能显著降低断线重连时延,避免遗嘱误触发,特别适合车联网、智能硬件、巡检等移动性强的IoT场景。本文从传输层协议原理出发,分析TCP在弱网下的困境,对比QUIC的连接迁移、快速握手及多流优势,并探讨落地架构与工程取舍,

weixin_34357928的博客 322

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

OFDM信号如何同时“说话”和“看东西”?深入浅出解析雷达通信一体化原理

本文深入解析OFDM雷达通信一体化技术,揭示其如何通过子载波和时频转换实现通信与雷达功能的完美结合。探讨了系统同步、匹配滤波等关键技术,并介绍了GNU Radio与USRP在软件定义无线电中的实际应用,为雷达通信系统设计提供实用指导。

weixin_33695450的博客 575
上一篇: 深入ResourceBundle
下一篇: 通过实例学习Struts2 - 从struts-blank开始 (2)
Andy
博客等级 码龄26年 115粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值