java学习笔记(四)

JAVA学习笔记(四)城堡游戏 我们在尝试了之前的简单媒体库构造之后,试着整合一下之前学到的关于类,继承,多态等知识,制作一个简单的城堡游戏,城堡游戏是一个简单的文字游戏,通过输入命令可以在地图上不同的房间进行移动。 阅读详情
 

话说2000年之时有一个开源MVC框架吸引了诸多开发者的眼球,接着一系列它的周边开源东西开始出现,一时间其火爆程度不可一世。它就是Struts,我讲了一下它的历史并不是想说它多么的火爆,而是想说它已经是过去的东西了,虽然使用它的人还是很多很多……

我们要向前看,不能居于过去的东西,当然如果你有精神去阅读他的源码,那么大可去读,毕竟可以学习到很多的东西。但是我还是要说,有那个精力你最好去阅读一下Spring的或者google的某些东西,比如guice。当然我没有阅读过Struts的源码,因为我是一个很懒的程序员,使用一个东西没有必要去阅读它的源码,除非你真的需要学习一些东西或者精力过剩觉得自己的头发掉的不够多……

Struts是一个MVC理念的框架,这个在很多很多的面试题中都被问烂了。其实MVC的理念很简单,将显示和后面的数据模型分离,然后用一个控制器来协调他们之间的某些动作。这样理解起来就简单了。当然数据模型可以是任何的东西,甚至是一个包含商业逻辑的东西。但是不要把Struts想得太复杂了,它做的事情很简单它将一个JSP与后台的一个FORM中的数据做了绑定,Action来处理一些需要的动作。

JSP只是在忠实的执行者自己的责任,显示数据,当然你想在里面增加一些AJAX特性也是可以的。FORM记录着这个时候数据模型的状态,而Action就是协调和处理两者变化的纽带。OK,其他MVC的东西你可以不去刻意研究了。


下面我们来看看Struts是通过什么将他们联系在一起的,其实这个东西也很简单一个StrutsConfig.XML文件,当然一个应用可以包含多个这种文件。这个文件中声明的就是一个FORM,JSP和Action之间的关系。我们来看一下它的一个节点:

<action-mappings>

<action name="AForm" parameter="method" path="/AAction" scope="request" type="com.XXX.action.AAction " validate="false">

<forward contextRelative="true" name="success" path="/A.jsp" />

<forward contextRelative="true" name="index" path="/B.jsp" />

</action>

<action parameter="method" path="/BAction" scope="request" type="com.XXX.action.Cction" />

</action-mappings>


这就是一个最关键的节点,如果你只在别人构建好的结构下做二次开发的话,那么搞明白它就可以应付大部分工作了。path这个属性定义的是访问这个Action的URI,当然它只是一个URI的结尾部分。完整的URI是由服务器的URI加上你的web应用的URI来决定的


scope作用域基本不会有人去改动它,name指定的是我们的Model也就是FORM,这个由form节点来定义,form的定义应该很好读懂,就是一个类的具体位置,我们再给它的实例起一个别名,也就是这个AForm。type是Action的具体类路径,validate声明是否使用Struts的校验框架。接下来是两个forward,这个就是指定了返回不同mapping对象时候跳转的不同页面。


看到它是怎么把三部分绑在一起了吧,其实它很简单,也很死板。这样三个东西就是一根绳子上的吗咋,不允许过多的重用。


XML其实是一种很好阅读的东西,不要被它吓倒,其实它很友好。见到了不管是什么东西的配置文件,第一件要做的事情是弄清他们节点的意义,一旦你明白了这些节点的意义就很容易了解他们。其实很多的框架都是使用XML作为配置方案的,通过阅读它们的配置文件你很快就能熟悉一种框架中各个部分的关系,这是我最短时间熟悉新框架的秘密!


再说一下初学者容易干的一些事情:


1.为每一个页面都定义了一个form,其实很多form的属性是重复的。其实form就是一个pojo一个简单的数据载体,如果页面使用的数据模型一样的话我们大可使用一个form。还有就是form中的数据比页面上多无所谓,但是form中的属性要是比页面少就会有问题。

2.把很多的动作都写到了一个Action中,当然这样的写法没有任何的错误,还可以减少StrutsConfig的文件容量。但是有些公用的东西分开写会给你节省很多时间,因为你只需要在Stringconfig中重新装配一下它就可以在别的页面后面很好的工作。虽然这样做有些不同于主流的写法,但是我希望大家都思考一下,其实一个程序的开发不应该是先有strutsconfig,而是应该先有所有的功能点,每一个按钮的操作都作为独立的Action,然后用strutsconfig把他们组装在一起。这样开发或许我们能节省一些时间并集中一些代码的修改。

3.在Action中夹杂太多的业务逻辑,这个是很多人愿意做的事情,但是请你们记住每一个Action实例都是一个唯一的,在他们中柔和大量缓慢的代码是会让你的系统出现性能瓶颈的关键原因。所以我们应该把业务逻辑抽离出来,这样做还能够将修改集中。我说了两次修改集中和代码集中,其实这是一个开发中很容易被忽略的东西,当然在他们项目最后时刻被弄得焦头烂额的一刻或许他们会记得容易修改的模块应该集中起来。

4.要严格遵循谁建立谁销毁的原则,有人喜欢把form当作数据载体传来传去,这是一件很危险的事情,因为你不会预知它在什么时候做了什么样的改变,更不能保证这些改变是你想要的。所以请将它作为一个Struts中的数据载体使用,不要超越了显示的界限。当然Java的编码中还有一个原则就是变量作用域最小化,这个与form的使用有着一样的原则。

5.页面中select标签对应的form中的collection必须要初始化,不然你会无法显示页面。

最后我还有一些建议:

1.不要去背Struts的tag,其他的也一样,因为开发中你很容易去找到tld文件查看或者找到其他的页面代码参考。脑袋的容量是有限的,没有必要为了无所谓的东西去记忆,找这样一段代码的时间绝对不会比你找一个异常的来源多什么。

2.如果你没有接触过任何一种开源框架,那么Struts你需要了解的就更多。它可以作为一个学习的基础,因为很多框架的配置方式与它十分类似。

下一篇我会说明一下Struts处理一个请求的的简单工作流程,我没有读过它的源码,但是大体的流程是不会错误的,因为我知道这类型框架处理请求的秘密!

Java8学习笔记(四) —— Stream流式编程 Java8学习笔记系列: Java8学习笔记(一)—— 函数式编程的四个基本接口 Java8学习笔记(二)—— Lambda表达式 Java8学习笔记(三)—— Optional类的使用 Java8学习笔记(四) —— Stream流式编程 Java8学习笔记(五)—— 方法引用(::双冒号操作符) 一、什么是Stream? Stream API借助Lambda表达式... 阅读详情

相关推荐

别再为淘宝滑块发愁了!一个Python脚本自动获取x5sec cookie的保姆级教程

本文提供了一套完整的Python自动化解决方案,帮助开发者轻松应对淘宝滑块验证码问题。通过模拟浏览器行为、精准识别滑块缺口位置和生成拟人化移动轨迹,脚本能够自动获取关键的x5sec cookie,显著提升爬虫效率。教程涵盖环境配置、验证机制分析、代码实现及反检测策略,是解决淘宝滑块验证的实用指南。

weixin_30300225的博客 574

Struts的多模块设计

Struts在1.1以后的版本引入了模块(Module)的概念,克服了1.0的并行开发所遇到的问题。但是模板的规划往往又是比较麻烦,如果不注意,可能适得其反,影响你的开发速度。下面我们看看如何去规划一个对模块的Struts项目。 首先我们需要建立一个web的项目,接下来就要进行目录规划。如下图:  1 首先确定项目的模块,如此项目中包含两个模块:mFirst和mSecond,当然还有缺省模板。 2...

海边夕阳 152

ActionForward 用法及详细说明

ActionForward是 Struts的核心类之一。在基于Struts的Web应用程序开发过程中,Action操作完毕后程序会通过Struts的配置文件struts- config.xml链接到指定的ActionForward,传到Struts的核心类ActionServlet,ActionServlet使用 ActionForward提供的路径,将控制传递给下一个步骤。ActionFor

2615

图像去雨:超详细手把手写 pytorch 实现代码(带注释)

占个坑,过几天来写

书山有路,学海无涯! 1万+

【KBrowser】基于 Kiwi/chromium 制作全新外壳,将 chromium 代码当作 webview 使用,实现可控核替换

chromium 其实只需几步巧妙的架构,就能拿来“换核”,甚至可以插件化,实现类似webview.apk 的效果。重新设计界面,不再是差不多的回声。而 Kiwi 基于 chrome 77 ,只有 50 MB。优势是兼容好、可安装扩展。

sinat_27171121的博客 2028

四. Java学习笔记四

四. Java学习笔记四 前言   本章主要是学习集合,首先先得了解一下集合: Java集合类存放在java.util包中,是一个用来存放对象的容器。 集合只能存放对象。 集合存放的都是对象的引用,而非对象本身。 集合可以存放不同类型,不限数量的数据类型。 Collection collection集合框架: collection类中常用功能,这些方法能够在collection的子类中使用: 泛型   泛型是一种未知的数据类型,当我们不知道是用什么数据类型的时候,可以使用泛型。泛型也能看成一个变量来

user-Mars的博客 234

YOLOv8【第十一章:视频追踪与流处理篇·第6节】BoT-SORT 改进:结合相机运动补偿(CMC)提升追踪稳定性!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 718

Java学习笔记四

Java学习笔记 使用方法 1. 初步认识方法 在面向对象编程中,类有两个重要部分,即数据和方法,方法有时也称为函数。比如构造函数,也可以称为构造方法,构造方法是类里面一个特殊的方法,用来初始化对象。类中的数据表示对象的属性,而方法表示对象的行为。 方法是一种根据代码的功能和用途将代码分组到特定块中的技术。将一个方法中的代码分组将有助于程序员开发程序。 要创建一个方法,必须做两件事,即定义方法和调用方法 Java 编程中的方法有两种类型,一种是没有返回值的方法,另一种是有返回值的方法。下图为Java 中定义

qq_45867996的博客 178

Claude Code本地Windows安装教程

本文介绍了在Windows系统上安装和配置Claude Code本地调用的详细步骤。首先需要确保网络畅通和账号余额充足,然后安装Node.js v22版本作为基础环境。接着通过npm全局安装Claude Code包,并进行版本验证。安装完成后,使用命令行登录并可以指定模型启动。最后还提供了切换API秘钥的方法,通过setup-token命令重新授权账号。整个过程配有详细的命令行示例和操作截图,方便用户按步骤完成安装配置。

猿小白的博客 2万+

Vue + ECharts:从零构建智慧农业数据监控大屏(附完整源码)」 「超实用!一步步实现智慧农业大屏,完整代码+讲解」 「前端新手友好:Vue + ECharts 打造炫酷农业数据大屏」 「

Vue + ECharts:从零构建智慧农业数据监控大屏(附完整源码)」 「超实用!一步步实现智慧农业大屏,完整代码+讲解」 「前端新手友好:Vue + ECharts 打造炫酷农业数据大屏」 「前端可视化项目实战:智慧农业监控大屏开发详解」 「农作物可视化监控:用 Vue 和 ECharts 构建大屏应用」 「从零开始开发一个智慧农业数据大屏(代码+图表展示)」 「前端新手也能实现!智慧农业监控大屏开发教程」 「用 Vue 和 ECharts 搭建动态数据大屏:详细图文教程」 「学习前端大屏开发:

sky10100100的博客 1535

JAVA学习笔记之四

   String类STRING 其实是CHAR类型组成的数组—字符串  String str = "abc";等效于:     char data[] = {a, b, c};     String str = new String(data); 介绍几个常用的方法length()返回此字符串的长度equals(Object anObject) 判

jiayue's BLOG 1613

置顶必读(1) |《滚雪球学 Spring Boot 4.x》专栏目录导航篇(持续更新中)!

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。 本专栏面向 有一点 Java 基础,但没有系统学过 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,最终带你从第一个 Hello API 一路完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 8万+

【Java学习笔记四】Java中的包

包的声明和引入:在Java语言系统中,Java编译器为每一个类生成一个字节码文件(.class),为了对类文件进行分层和按用途分类管理,同时也为了解决相同类名的文件冲突的问题,Java提供了包机制来管理类名空间。一般情况下,应将相关的类组织到同一个包中。使用包提供了包的封装和存取权限。 一个包可以包含若干个类,还可以包含若干个包。 包被放在当前目录或指定目录下,该指定目录要在操作系统环境变量表中的...

T_T233333333的博客 608

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

对于JAVA的入门到精通学习笔记模块四

模块三重点回顾: 1.idea -> 自己看 2.算数运算符: + - * / %(取余) +: 字符串拼接 -> 内容直接往后拼接 自增自减:++ -- a.单独使用:符号在前在后都是先运算 b.混合使用:符号在前先运算,再使用运算后的值 符号在后先使用原值,再运算 3.赋值运算符: = += -= *= /

L_S_Q___的博客 603

老版QQ原生表情gif动态

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

Java学习笔记之四

Java学习笔记之四 主要内容为:Java IO和Java类集 一、Java IO 编程 1、基本概念 Java中对文件的操作是以流的方式进行的,流是Java内存中一组有序数据序列。Java将数据从源(文件、内存、键盘、网络)读入到内存中,形成了流,然后还可以将这些流写到另外的目的地(文件、内存、控制台、网络)之所以叫做流,是因为这个数据序列在不同时刻所操作的是源的不同部分。 2、...

独爱Java 131

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

JAVA学习笔记四

6.一个源文件中最多只能有一个public类。其它类的个数不限,也可以将main方法写在非 public类中,然后指定运行非public类,这样入口方法就是非public的main方法。源文件的基本组成部分是类(class),如本类中的Hello类。5.如果源文件包含一个public类,那么文件名必须为public类名。4.一个源文件中最多只能有一个public类。6.\r:一个回车(让光标回到本行开头,会替换开头的字)3.java语言严格区分大小写。1.\t:一个制表位,实现对齐功能。

qwsadsdga的博客 546

java学习笔记四——break

break break可以跳出所在的循环,但不能跳出这一层外的循环。 代码在此,类省略了。 public static void main(String[] args){ int a=18,b=18; while (a<21){ if (a==20)break; a++; } ...

NLP与推荐算法 538

Java学习笔记(四)

运算符时一种特殊的符号,用以表示数据的运算、赋值和比较等。

m0_73963149的博客 1444
上一篇: java学习笔记(三)
下一篇: java学习笔记(五)
Nihility_zero
博客等级 码龄21年 3粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值