目录
一、前言
写这个东西是在我开始接触Java两个2个月左右的时间,不是一开始学习就一步步写下来!
至于为什么?
因为之前一直做C# WinForm项目,到今年才因为种种原因开始接触Java,毕竟学新东西是需要时间成本的,在还没确定下来自己是否能接受的前提下,是不可能写这些的。
在此之前,可以说对于Java属于纯小白,这里先吐槽一下,自己学习Java的亲身感受!
C#一直用Visual Studio做开发从2013版用到现在的2022版,对于IDE环境开发的基础学习,就是控件的一些属性,基本拖拖拽拽,然后看看文档都能搞定,至于基本语法不在讨论范围之内,也许是因为用的时间比较久,给我的最大感受就是开箱即用,开发环境安装之后基本就可以开始上手了,主要考虑逻辑处理问题,一些开源代码基本也是下载了之后工程文件打开就能跑起来,不管结果是不是你想要的,至少能跑起来,能跑起来就可以Debug找问题。
C#开发不考虑用哪个开发环境,毕竟都是微软的东西,开发环境就不用选,然后各种依赖关系,基本你下载开源代码之后,第一时间都会自动帮你同步好,很少有依赖冲突问题~
二、Java开始学习
抛开基本语法这些不说,想真正能开发需要学习跟选择的东西
1、选择开发系统跟运行系统
这里首先选择Windows,后续改用Linux(估计还有很多坑要踩)
为什么不上来就用Linux?
学习的时间成本,毕竟我的目标是快速实现我需要的功能
为什么后续还考虑Linux
跑起来之后需要降低成本,同等配置的服务器用Linux的比用Windows的便宜,而且很多东西可以用开源的,毕竟免费,执行效率还高些
2、选择IDE集成开发环境
目前比较主流的应该是Eclipse跟IDEA,最终我选择了IDEA,这个没有为啥,个人偏好,还有一个就是你的老师用啥,你用啥,这样遇到实际开发中的问题,你们不用因为IDE环境不同额外符出成本,否则到时就会有鸡同鸭讲的感觉!
其实还是有坑的,不同版本的IDEA也是有差别,不过这种差异相对小很多了,暂时忽略!
为啥很多网上的Java或者IDEA配置教程,你看了也不见得能学会,因为这种环境的差异,导致你根本找不到他说的东西,对IDE环境的熟悉程度,跟踩坑多少都有关系,踩坑越多,你自己解决问题的能力就越强,这里要说的是所有踩过的坑你不一定都要记录下来,毕竟百度上有很多,你只要记住帮你解决问题的那条答案大概是什么样子的,将来再次遇到能够分辨哪个解答才是你需要的就可以!
3、项目框架的选择
这个怎么说呢,Java整个生态是开源为主,一个基于Web的应用,牵扯到数据库,Web服务器,应用服务器,开发框架等等太多的选择,因为可选的东西太多,所以开始需要各种尝试,到我定下来具体这里用什么已经一个月左右的时间了!!!
实际上这个东西还不是我选的,毕竟我只是问了个做Java开发的朋友,告诉他我现在的需求是什么,想用Java干什么事情,然后他就给了我一个方向,毕竟别人做开发的也很忙的,不好啥事情都追着别人问吧,于是能百度的就百度,实在搞不定了,让别人给指点下!
为啥说是业余开发,因为我的真正需求并不大,但是后续可能在现有基础上扩展,前期这些只是考虑到后期扩展的可能需求,尽量把架子搭的大一点!
这个跟各种配许机构学出来的不太一样,毕竟那边是老师怎么教,教了什么你就会什么,会了什么就用什么!
这里是,我想实现什么,然后知道大概需要用什么,然后部分内容选择自己会的东西,学些新的东西结合起来,重点在结合起来,这个过程可以说是一路踩坑踩过来!
4、综合环境的确定
最终所有东西基本确定下来大概是这个样子:
开发部署环境:Windows+Java11+Tomcat+MySQL+IDEA
框架及版本管理:Maven+Spring MVC+mybatis+github
大框架定下来之后开始我的踩坑之路,对于在学校的学生来说,看看你们要学什么吧!
三、基础运行环境的配置
1、开发跟运行平台
开发使用系统:windows 11 专业版
部署运行系统:Windows Server 2019 Datacenter
基于网络的开发你需要一台服务器,有公网固定IP(没有域名的情况下),一般家庭的网络环境是没法实现的,所以部署运行系统与开发系统略微不同,毕竟服务器一般都用的Server系统
这里用了亚马逊的AWS,在上面选了个系统,开发学习对服务器的要求是能跑就行,选了个t2.micro的机型,12个月的免费试用
开发环境跟部署环境差不多,所以配置的时候基本是一样的,只不过不需要IDEA
2、Java环境
这里目前选择Java11,这个不算最新,不过对于网上遍地都是关于Java7、8的样例跟配置,还是要看下,如果后续没有遇到需要降级的坑这个就定下来不动
太深层次的东西不懂,但是Java11与Java7、8一个很大的区别是不需要单独配置JRE,Java11的JDK跟JRE是放在一起的,不用单独下载跟配置JRE
3、Tomcat
Tomcat的使用版本还是有一定依赖关系的,具体可以见下表
这里选择的是9.0.56的版本
开始用了Tomcat10,然后问题出在后面框架使用的Spring报错问题,这个错误是
org.apache.catalina.core.StandardContext.listenerStart 配置应用程序监听器[org.springframework.web.context.ContextLoaderListener]错误
java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
原因是:2018 年,Java EE 改名为 Jakarta EE。这导致一些 JAR 包的包名也在之后的版本中进行了更改。这对本项目的影响是,Spring 本身是不含 Servlet、JSP 的 JAR 包的,但其依赖这些 JAR 包。如果在 Tomcat 服务器中部署的项目使用了 Spring,则这部分的 JAR 包将由 Tomcat 服务器来提供。
目前使用的Spring版本期望的 JAR 包前缀是 javax,而Tomcat 10.0.0 提供的 JAR 包前缀是 jakarta。因此,Spring 报了一个认为没有 Servlet、JSP 的 JAR 包的错。
题外话:
问题一出来很快就解决了,但是告诉我解决方案的人,只是说他没用用过Tomcat10,让我降下来,并没有给出上面这个不能用的解释,找到这个解释大概用了我2天时间。
这里是个算是个小坑吧,个人习惯是既然开始学就要学相对新一点的版本,新版本有很多新特性,解决修复了老版本的一些问题。
但是Java这里给我上了一课,因为Java的开源性导致各种依赖冲突是在开发过程中经常需要维护解决的问题,如果你依赖别人的包,又想升级相关依赖关系,就一定要先知道你用的这个包依赖的那些包的版本,让整个程序跑起来,然后再尝试升级相关依赖,遇到坑了就退回之前版本,找问题如果能解决,就解决之后升级,不能解决就只能使用当前版本依赖,等待开发方升级。
Maven就是一个用来进行依赖管理的东西,后面会讲,引用别人的项目也是,不建议在你现在的开发上直接集成,个人建议是新建一个工程,先测试你要引入的类是否能正常跑起来,说白了就是他依赖的东西跟你现在用的依赖不一定一样,直接集成很有可能是无法正常运行的,引起冲突的依赖也不是很容易查出来,更何况你都还不知道是否是依赖问题导致无法使用,还是别人给的类根本就没有写全,本身就跑不起来,解决问题的前提是能先跑起来!
Maven对于项目依赖存放在pom.xml中,网上有句话说给了类不给完整pom的都是耍流氓!
4、MySQL
这里目前使用的是MySQL 5.5.28 Win32版本
为啥不用最新的8.x.x.x,因为网上目前很多便宜点的服务器还是用5.x.x.x版本,另外就是8.x.x.x密码验证方式改变了,稍微有点麻烦,原则还是先能跑起来,有时间有必要的需求的时候,再考虑升级问题
5、IDEA
集成开发环境使用了IDEA 2021.3.1
这个算是当前最新的版本,为什么这个使用最新的?
说实话看网上很多设置教程是基于2016或2018的版本的,很多设置项跟这个2021版位置都不一样,不过这个版本有官方中文包,上手更方便一点,其他东西花点时间成本查下,问题不大
6、框架及版本管理
Maven+Spring MVC+mybatis+github
Maven主要解决依赖问题,说白了就是你项目中要用到别人的东西,不用一个一个自己去下载,只要告诉Maven你要用什么,用哪个版本,剩下的事情交给他,所以你要学会配置跟使用Maven
Spring是个项目框架,解决的项目模块之间的依赖,简单说如果你的项目有4个部分A、B、C、D本身A、B、C、D之间有紧密的关系,如果其中任何一个出了问题,都会导致另外3个无法运行,通过Spring之后,A、B、C、D之间不再相互有依赖关系,他们都通过Spring进行关联。
用生活中例子来理解,就是A有一袋米、B有一桶油、C有一只羊,如果A想要羊,B想要米、C想要油,原本他们之间进行交换,必须A、B、C三人同时到场,才能完成交换,但是现在有了钱,A可以把米卖了直接变成钱,去买C的羊,C可以在B不在的情况下先收了A的钱,然后再找B去买油,前面的交易不需要B存在,A可以先把自己能交付的东西交付,拿到自己想要的东西,这个Spring就类似于钱,或者银行的作用。
MyBatis是一个用来管理数据库东西,主要解决数据库的跟Java之间的联系
GitHub主要用于自己版本控制,方便在后续出错的时候恢复到之前的版本
7、小结
讲到这里,貌似还没开始讲什么实际的东西,不过已经过了几个小坑!!!
如果你想独自完成一个带有后台数据库跟前台登录小项目,大致需要学习的内容包括如下:
Windows操作系统的使用(或Linux操作系统使用)
Java开发运行环境的配置
MySQL的安装与基本配置
Tomcat服务的安装与基本配置
Java基本语法
Html基本语法
JavaScript基本语法
IDEA集成开发环境
IDEA环境下Maven、Spring、MyBatis、GitHub的配置与使用