首页 \ 问答 \ spring boot 编译后是jar 还是war包

spring boot 编译后是jar 还是war包

更新时间:2022-03-01 22:03

最满意答案

个人的一点经验之谈,希望对你有帮助!

作为一个合格的Java软件工程师必须具备的条件? 这个问题是我一直想知道的。但是它又分为很多个方面... 比如,是掌握具体的技术, 还是,拥有很强的自学能力? 现在的软件方面跟新和升级特别快, 无论是什么知识,当你真正掌握它的时候,也许就已经被淘汰了。 所以这就要求我们不停的去学习... 所以自学能力很重要. 但是我觉得自控能力更重要...(悲哀...今天看了一天动画...) 我自认为是没有什么自控能力的人... 好了,再来说说技术方面。 到底现在该掌握些什么具体的知识呢? 这里,我真羡慕.net程序员... 从头到尾就一个.net framework(.net框架), 这样就可以很集中精力去深入学习它,而且不用担心会被淘汰... 而Java这边,洽洽相反框架满天飞,而且各有所长... 这就难免让人需要经历选择性的痛苦...(虽然原理都差不多) 而且还要根据公司的不同而使用不同的组合... 这就产生了n种集成方案...(崩溃啊...) 所以要全部学会几乎不可能啊... 虽然是这样,但是有点挑战性才有意思嘛...呵呵... 那么一个合格的java软件工程师究竟需要掌握哪些具体的知识呢? 下面就我个人的角度来总结一下,如有不足,也请高手指出。 (ps:本人只列出普遍常用的知识) 首先当然是Java语言本身了。Java语言的创始人曾说过"Java=C++--"。 什么意思?就是Java语言是在C++的基础上减去一些不必要的东西,使其更为实用,更具有生产力。 Java语言的语法很简单并不像C++那样复杂.(本人曾经接触过C++...伤心的经历...) 很多较为复杂的数据结构Java都能简单实现,而C++较为麻烦。 其中很大的原因是因为Java是单根结构. 而且Java的垃圾回收机制也有很大的功劳.(.net的垃圾回收机制也是Java的灵感) 但是如果想深入底层了解Java还是需要费很大的功夫的... 比如,你要学会javap命令去反编译java文件然后再去看懂那些反编译后的结果... 这样你才能了解Java语言的原理。 很多情况下不同的代码,但是最后产生的字节码是相同的。 也有些情况,虽然代码只相差一点但是效率是天壤之别。 (例如JDK5新添加的StringBuilderStringBuffer的区别) 这些在都可以反映在字节码里。 关于Java语言的问题不是本文的重点,我就不多说了。 总之学好Java这门语言是基础中的基础。 其次,说到Java语言就不能不说面向对象(OO)。 Java语言的产生也有很大的一部分是为了生成一个具有生产力的OO语言。 为什么这样说? 在早些年代OO的思想虽然被提出,但是那些纯粹的OO语言却没有丝毫的生产力。 (如出名的:smalltalk它是100%的OO) 而Java在保持高度的OO的前提下更注重生产力。 (ps:Java是98%的OO,其中8种基本数据类型,static关键字,运算符等,这些都不OO) 所以随着软件工程的庞大OO的思想很重要。 好了,到这里如果以上你有所了解,并掌握的一般。那么就可以继续往下学习: 如果你想掌握Java语言中更精髓的东西,那么我建议你可以做一些小的桌面应用程序。 其中,你会学习到另一些知识: 并发,IO,GUI,AWT,Event,Listener,Socket,Reflect等java更深层的东西。 (当然,有些只需了解,因为有些东西将来在做B/S结构的系统上是用不到的... 如果将来你想从事嵌入式开发,这些你就要多一点了解了。 很可惜,我还没有想过去做那个... 还记得当我第一次了解AWT里的Event和Listener的实现方式后, 我觉得JDK的设计人员真是厉害,设计的是那么的巧妙,第一次感觉代码是那么优美, 里面用到了各种设计模式,真是让人惊讶。 遭了,又在自我陶醉了...) 回到正题,关于Java语言的基础,我就先讲到这。 当我们掌握了Java之后呢? 真正的Java开发现在才是开始: 这时我们必须要接触另外一样东西, 没错,那就是数据库! 数据库的重要性就不用我在这里强调了吧? 无论你学习什么技术,数据库都是必备品。 作为Java程序员,我们不是DBA,我们没有必要掌握太多的数据库的管理知识。 我们只要知道如何连接数据库进行访问和CRUD操作,并对一些地方提高效率就可以了。 如创建索引和适当的使用存储过程即可。 首先,学习什么样的数据库呢? 没办法,多了解一点吧...毕竟每个公司用的都不一样... 目前的4大主流数据库是必须要学习的: DB2(IBM号称世界上用的最广泛的数据库,不过近些年已被MySQL慢慢侵蚀掉了.但是很多的大公司在用,毕竟是IBM啊。) SQLServer(当年凭借SQLServer2000获得很大成功,由于和Microsoft的产品兼容很好,所以很受欢迎。) MySQL(真正的轻量级啊...而且是低端的主流开源数据库,使用量已经超越DB2。) Oracle("甲骨文","神谕","圣贤","哲人"...光是对Oracle这个单词的翻译就可以看出它多么拥有实力。不过大的有点夸张...) 好了,如果你已经会简单的使用上面的数据库了,那么就继续往下吧: 既然要访问数据库,那就离不开JDBC! JDBC相信大家都知道,它只是一组接口,然后由不同的数据库厂家去实现, 这样用JDBC访问数据库的时候方法其实都是一样的,这里我就不多说了。 另外JDBC是将来ORM的底层实现,学习好了它,对ORM框架的实现就更为清楚原理。 下面重点要说说SQL语句。 SQL有2套标准(82和99),我不太确定...记得不太清楚了... 现在的数据库基本这2种都支持。 但是问题来了,不同的数据库,又对其改变了一点... 这是最令人头痛的... 也就是说,4种数据库,你就要记住4种SQL的区别是什么,虽然大体差不多,但是还是要区分开来的。 而且不同的数据库,对SQL语句又有不同的优化。 也就是同样的SQL语句在不同的数据库上执行的效率不同。 所以SQL语句也是一门必修之路啊... 而且不要看似简单,其实要想写出一条高效率的SQL语句很难啊... 尤其是在复杂的多表联合查询中,这种效率问题一定要考虑。 另外,最烦人的莫过于数据库程序设计。 每种数据库有自己的语法。如SQLServer里的T-SQL,Oracle里的PLSQL等... 使用这些语言编写触发器,存储过程等...自我感觉是最头疼的...而且用的不多... 了解一下就好... 好了,当学习完数据库.我们就可学习web开发了. 所谓的web开发,就是基于浏览器/服务器(B/S)的开发。 那么既然是在浏览器上跑的程序那么就离不开HTML、CSS、JavaScript、DOM等网页技术。 所以下一步就是学习HTML,HTML应该是最简单的标记语言.很容易就能学会。 根据web2.0的标准,XHTML将是规范。 所谓的XHTML其实和HTML4.0的规范差不多,就是标签的要求更加严厉了。 学习HTML的同时还要一起学习CSS,这个东西说简单,也简单,说难也难。就看你个人了。 但是毕竟我们不是美工,只要了解就好了。(有时我就在界面上消耗了很多时间...郁闷...) JavaScript我个人建议还是要稍微花点功夫研究一下的... 毕竟后面涉及到Ajax和用户体验等方面需要用到它... 它是一门客户端脚本语言,即:浏览器解释执行。 是一种弱类型语言,但是研究起来还是很深奥的... 至于DOM本人还没有花时间研究过,不敢轻易下结论. 当完基本的网页技术后,就可以进入正题,Java在internet上的应用就从这里开始: 前面学习了网页技术后,我们就可以做出简单的静态网站。(即:没有与数据库交互.) 静态网站由后缀名为.html或.htm结尾。 但是静态网站是毫无用处的,所以我们要开发动态网站。 最古老的技术就是CGI(通用网关接口). 它根据浏览器端的http请求激活响应进程,每一个请求对应一个进程。(注意不是线程,是进程!) 当同时有很多请求时,程序挤占系统资源,造成效率低下。 目前流行的动态网页技术有:ASP、JSP、PHP、ASP.NET等... 这里我就不一一介绍他们了。关于他们的对比,网上比比皆是. 而今天的主角就是JSP! JSP是什么?说白了就是在HTML里嵌入服务器端可执行的Java代码。 这里的Java代码和前面所说的Java代码是一样的。 这里要注意的是jsp最终会转换成servlet。 所以学好Jsp就要先学习servlet。 与applet对应,servlet顾名思义就是服务器端脚本。 这里是学习的重点。 其他的也没什么好讲的。 这里要掌握几个概念:servlet容器,IDE,taglib,DAO,MVC等... servlet容器,就是解释执行servlet代码的地方。 IDE,前面我都没有提过,也就是因为前面的学习都很简单,并不需要IDE的支持。 而接下来的开发会比较复杂,文件数量的增多和管理会很麻烦,而且很多的API不可能都背下来。 所以这里就是使用IDE的时候了...至于用什么IDE本人觉得无所谓... (我用的是最普遍的Eclipse,当然你也可以用NetBeans6.0以上版本.我觉得也很不错。) taglib,这里用的比较少,以后学习框架用的比较多. DAO,很重要。它的实现方式多种多样,值得研究。 MVC,很重要。但是重在理解,理解为什么要用MVC。 最后关于Http协议,Servlet容器里的线程池的实现等... 这些如果你有能力和时间就去看看...没有什么坏处... 学到这里,可能中间你会用到另一门技术XML! 作为java程序员来说,我觉的只要了解XML原理就可以了。 不可能还让你去写scherma或DTD的... 所以我们只要学习读写XML就可以了...(JDOM或DOM4J) 下面在来简单的说说ajax... 当你程序要求你在不刷新页面的情况下读取数据并显示,这是就是ajax的勇武之地. 如果你之前的javascript没有学的特别的牢固,也没什么关系,用框架吧。 所谓的ajax框架就是一个javascript的库。它简化并对javascript封装。 常见的ajax库有很多,这可以根据情况自己选择学习。 (dojo、prototype、jquery、dwr、ext等...) 等学习到了这里,你已经可以独立的开发一个简单的网站了。 但是,这里有很多的问题: 1.代码量大 2.开发时间长 3.系统扩展性差 4.虽然用MVC分层,但是JSP+Servlet+JDBC这种开发方式难以维护。(尤其是JSP里有大量代码,像ASP那样) 5.理论上不OO 6.效率低 7.安全性低 等等... 短短一时间我就能想到这么多的不足,证明这离企业级开发还有很大的差距. 那么正真的企业级应用是什么呢? JavaEE的本质就是为了企业级开发... 可惜,至今还未能领悟JavaEE的核心思想... 但从技术角度,JavaEE拥有哪些技术呢? 貌似太多太多...EJB是JavaEE的核心思想...感觉有点类似.Net框架...即:一个框架包含所有功能. 可惜一直没时间学习过EJB... 所以我下面要讲的是如何针对上面的不足加以改进? 1.代码量大就造成"开发周期的延长"。而且自己写的代码有时会有漏洞,或效率上的问题。(如果你不是专家的话) 所以要解决这个问题就要引入"框架". 如果引入了框架,那么有些问题就可以迎刃而解。 1.代码量的减少。 2.开发周期的缩短。 3.效率提高一点。 4.安全性提搞了一点。 毕竟人家是顶尖的专业人士,写出来的代码肯定比自己写的健壮又高效。对吗?而且又可以减少代码量。 框架分很多种,就像上面的ajax框架一样,它也是一种框架。 下面就列出一些流行的框架: MVC框架:Struts1.x,Struts2.x,JSF,webwork等...其中最令我期待的是struts2. ORM框架:Hibernate3,Ibatis,jpa等...其中最令我期待的是JPA. AOP框架:Spring2.5 貌似现在只流行这个...AspectJ都没人提... 至于EJB里的,我不太了解... 但是至少上面的是主流.如果遇到非主流...也就算我倒霉...再学呗... 至于系统扩展性和维护性差是系统架构的设计问题. 这个问题不是我在这里一句两句就能表达清楚的。 (前些日子搞了个泛型DAO模式,都研究了很久) UML和design pattern是需要经验的... 在学习这些框架的过程中会有很多意想不到的事情发生... 再深入学习就是webservice和分布式了... 感觉我还没有触及到那个层次... 还差的远呢...不过慢慢来吧... 今天说了那么多就是想知道做为一个java软件工程师.到底需要哪些技术? 我很需要自我反思... 可能我今天说的都只是皮毛,也有很多欠考虑的地方...希望朋友指出... 也可以给我意见... 也许我看问题不全面,或是有偏见,也欢迎指出。 本来只想随便说说的... 可是一下子废话了那么多... 唉... 睡觉去了...

其他回答

下载个北大青鸟的教程吧
我给你推荐一个教材的,我就是从这本书入门的,《JSP网络开发实用工程案例》

用Java做网站,基础必须打牢,不然会很吃力的,所以建议你先看基础的,编程思想也不错的,我不建议你看核心技术,把基础学好了,你就可以直接学JavaEE了!

要这样的话,就直接看jsp网站建设方面的书就好了
我和楼主的情况一样,也是从零开始学的,经过3个月的时间,现在已经掌握开发网站后台程序的基本能力,但是对使用框架开发还是有点晕;我的学习路线是,先学习Java的基础,我看的是北大青鸟的教程书《JavaWeb基础》,有个大纲,我在里面做好了笔记,需要的话Q我

哈哈 找对人喽,给你个java学习路线图

http://www.itcast.cn/itcast_static/javaline.htm

别人给的意见只是参考,自己选准目标才是关键。我是一名C++程序员,欢迎各位交朋友。我的站点:www.softlp.cn

看thinking in Java这本书讲解深入 有难度 看完的话受益匪浅 如果     觉得thinking in java 太难的话 就看java核心技术 简单一些 一共两卷 买盗版的吧 很便宜 哈哈 
下面就是另外的一层境界了
html css javascript 这些不是java的内容 但一定要了解
jsp、servlet JavaBean这个没什么可说的 张孝祥的书不错 很全面 这时可以做个小网站什么的 用mvc设计模式 也就是JSP 负责显示界面 相当于MVC中的 V
Servlet 负责历程控制  相当于MVC中的 C
JavaBean 负责功能 相当于MVC中的 M 
学习struts spring  hibernate框架 这时也可以做一些小项目了 实践一  下  当然你会发现实际练习中会有很多问题出现 这是提搞的好机会

相关文章

更多

最新问答

更多
  • 如何在Laravel 5.2中使用paginate与关系?(How to use paginate with relationships in Laravel 5.2?)
  • linux的常用命令干什么用的
  • 由于有四个新控制器,Auth刀片是否有任何变化?(Are there any changes in Auth blades due to four new controllers?)
  • 如何交换返回集中的行?(How to swap rows in a return set?)
  • 在ios 7中的UITableView部分周围绘制边界线(draw borderline around UITableView section in ios 7)
  • 使用Boost.Spirit Qi和Lex时的空白队长(Whitespace skipper when using Boost.Spirit Qi and Lex)
  • Java中的不可变类(Immutable class in Java)
  • WordPress发布查询(WordPress post query)
  • 如何在关系数据库中存储与IPv6兼容的地址(How to store IPv6-compatible address in a relational database)
  • 是否可以检查对象值的条件并返回密钥?(Is it possible to check the condition of a value of an object and JUST return the key?)
  • GEP分段错误LLVM C ++ API(GEP segmentation fault LLVM C++ API)
  • 绑定属性设置器未被调用(Bound Property Setter not getting Called)
  • linux ubuntu14.04版没有那个文件或目录
  • 如何使用JSF EL表达式在param中迭代变量(How to iterate over variable in param using JSF EL expression)
  • 是否有可能在WPF中的一个单独的进程中隔离一些控件?(Is it possible to isolate some controls in a separate process in WPF?)
  • 使用Python 2.7的MSI安装的默认安装目录是什么?(What is the default installation directory with an MSI install of Python 2.7?)
  • 寻求多次出现的表达式(Seeking for more than one occurrence of an expression)
  • ckeditor config.protectedSource不适用于editor.insertHtml上的html元素属性(ckeditor config.protectedSource dont work for html element attributes on editor.insertHtml)
  • linux只知道文件名,不知道在哪个目录,怎么找到文件所在目录
  • Actionscript:检查字符串是否包含域或子域(Actionscript: check if string contains domain or subdomain)
  • 将CouchDB与AJAX一起使用是否安全?(Is it safe to use CouchDB with AJAX?)
  • 懒惰地初始化AutoMapper(Lazily initializing AutoMapper)
  • 使用hasclass为多个div与一个按钮问题(using hasclass for multiple divs with one button Problems)
  • Windows Phone 7:检查资源是否存在(Windows Phone 7: Check If Resource Exists)
  • 无法在新线程中从FREContext调用getActivity()?(Can't call getActivity() from FREContext in a new thread?)
  • 在Alpine上升级到postgres96(/ usr / bin / pg_dump:没有这样的文件或目录)(Upgrade to postgres96 on Alpine (/usr/bin/pg_dump: No such file or directory))
  • 如何按部门显示报告(How to display a report by Department wise)
  • Facebook墙贴在需要访问令牌密钥后无法正常工作(Facebook wall post not working after access token key required)
  • Javascript - 如何在不擦除输入的情况下更改标签的innerText(Javascript - how to change innerText of label while not wiping out the input)
  • WooCommerce / WordPress - 不显示具有特定标题的产品(WooCommerce/WordPress - Products with specific titles are not displayed)