Tomcat,Servlet,jboss,weblogic,jetty,ejb,jndi,jpa,j2ee,jsf是什么?

我学过计算机组成原理和计算机网络,以前也用纯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的请求?

阅读 4.1k
3 个回答

看来你没用过这些东西,你用过就明白了。

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。

JavaEE: java的网站标准, 第一版最难用. 后面的版本对很多东西进行了优化. 最常见的时文件的上传.
JavaSE: java基本库, 你敲的代码都是基本库里的, 其他都是从基本库衍生的.比如你用类,你敲算式,你 声明变量等等.
JavaME: java曾经有过手机版本, 主要是诺基亚的塞班系统上可以用java开发一些游戏. 随着诺基亚凉了,也就凉了.
jstl:就是在jsp中规定的一套取值的语法, 主要形式是${},像取放入request.setAttribute("name","xxx") ,在jsp中用${name}取出.
jsf:没用过,就记得用这种打开jsp特别卡.
jpa:java自己定的从数据库转到javaBean的一套库, 巨难用, 现在很少用了.
jndi:JNDI学习总结(一) 看看这个吧, 说实话, 自己弄个配置文件比这个方便多了.
javaBean:就是java对于实体类一套规定, 比如类成员属性私有啊, 通过get/set访问属性啊什么的,命名什么的, 人家高兴就好.
weblogic,jboss:两个web服务器, 跟tomcat一样. 区别就是weblogic支持的连接数多.
jetty:就是是相当于把底层socket又做了一个封装让他更方便开发并发服务端.
springboot有内置web server: 这个就是用jetty再套一层http解析, 和javaEE那些接口的实现.就做了一个web容器.

像淘宝这样的超大规模网址通常都用什么web server来处理http的请求?
不知道, 我猜是自己开发的吧. 毕竟这东西原理不复杂,就是数量级上来了比较难.

搜索引擎了解下。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题