我学过计算机组成原理和计算机网络,以前也用纯c语言和access写过cgi网站放在Apache里面运行,也写过asp和php,后来因为发展需要也开始学java了,也按照网上的教程能够使用纯servlet+jsp+Tomcat写简单的动态网站成功跑出来过。
所以基本的框架使用我都会,但是具体到这些技术名词具体代表什么含义,在整个java技术栈里面都是什么地位我就不太明白了。
但是我发现java的概念实在是太多了,一大堆奇奇怪怪的名词。
我目前已经知道的是servlet有一套规范interface,我们只要继承这个interface实现里面的doGet和doPost方法,Tomcat容器实现了这套规范,只要按照Tomcat容器的规范把编译好的servlet class文件放到web-inf/classes路径下,然后在web.xml里面写好访问不同的url映射到对应的servlet,Tomcat就通过判断从socket中传入的HTTP请求行的方法和url,实例化
javax.servlet.http.HttpServlet;
javax.servlet.http.HttpServletRequest;
javax.servlet.http.HttpServletResponse;
等几个对象,设置好相关属性,然后执行对应方法,然后再生成好好响应体通过socket回传给客户端。
但是剩下的其他名词我就不太理解了,比如说JavaEE是什么,为什么我在创建java web项目的时候他让我选JavaEE的版本,是不是java web项目=jdk标准库+JavaEE标准库(例如javax.servlet就是JavaEE才提供的jar包?),标准jdk就没有servlet的库吗?那么JavaSE和JavaME又是什么呢?他们又额外提供了哪些jar包?我在网上查到的都是一大堆文字概念,没有人从技术本质上解释他是什么。
jsp我大概知道就是一个模版引擎,可以像php一样写程序,他的el表达式也很像php的模版引擎smarty。那么jstl和jsf又是什么东西呢?他们和jsp之间是什么关系?
涉及到数据库,我明白jdbc和我之前搞asp用的odbc很像,也是适配器模式,提供一套接口,让所有数据库遵循这套接口即可。?
但是什么jpa,jndi我又不太明白了,还有javabean,javabean是不是就是我们在php的orm里面通常说实体类?为什么给实体类命名为java豆?
还有比如说weblogic,jboss,jetty又是什么东西?jetty是不是相当于把底层socket又做了一个封装让他更方便开发并发服务端?类似于php语言里面把socket官方标准扩展又用swoole封装了一层?
现在流行springboot,我看他有内置web server,它内置的web server是什么技术,和Tomcat相比怎么样?像淘宝这样的超大规模网址通常都用什么web server来处理http的请求?
看来你没用过这些东西,你用过就明白了。
JavaEE是历史遗留下来的词,最初sun公司推出ejb的时候,把java分为两个版本,一个支持ejb的叫j2ee,一个不支持ejb的叫j2se,然后后面的java版本都分ee版和se版,但随着ejb的彻底失败,这两个版本的区别也越来越没有意义。javaMe原来是用来实现嵌入式开发的,显然也彻底失败了,没人用了。
jsp确实是用来渲染html的后端模板,现在已经基本上被淘汰了,jstl也没必要了解。springboot推出的替代jsp的模板引擎也基本上全都失败了,前端已经被三大框架霸占,不再需要后端渲染html,html在前端被javascript渲染替代了后端所有模板引擎,包括jsp在内,都死了。可笑的是为了解决seo优化问题,前端框架发展出服务器渲染这类技术。
weblogic,jboss,jetty只是一些外部产品或者框架,基本上是一些实现java相应规范的容器。
springboot的内置web server,其实就是springboot帮你把tomcat/jetty之类的web server打包起来,这样你就不用在外边另外安装一个tomcat,直接就可以运行你的web app。
java bean一开始是指一个有属性的类实例,所谓的属性不过是指getXX和setXX方法,后来sun推出ejb之后,ejb就把bean的名字盗用了,虽然后来ejb彻底失败了,但还是占用了bean这个名字,原来简单的bean,只好用了另外一个名字叫pojo。