javaWeb发展历史
https://blog.csdn.net/weixin_42694511/article/details/121599320
https://blog.csdn.net/qq_43421035/article/details/119711706
简介
1995年java语言的诞生,刚好赶上了网络时代,java三大军:JavaSE(桌面程序, Java Platform Standard Edition),JavaME(手机端,Java Platform Micro Edition),JavaEE(web服务器, Java Platform Enterprise Edition—Java 平台企业版),由于java在桌面程序和手机端的开发,都赶不上其他语言写的好,很快阵亡,然而发现,java简直就是为服务器而生的语言,由于项目都是发布在linux服务器上的,而java很重要的特性就是与平台无关性,因为java程序都是用在java虚拟机上运行的,所以不管是什么平台,只要安装了jvm就可以运行java程序,做到了一次编译,到处运行(Write Once,Run anyway),所以java语言很快就占领了web市场。javaweb就是用java语言编写的web应用,最开始开发初期,sun公司(现在已被Oracle公司收购)推出了Servlet技术,提供了开发web应用的基础.
JavaWeb发展历程
1、Servlet出现之前
1.1 静态资源
Servlet出现之前,用户使用浏览器向WEB服务器发送的请求都是请求静态的资源,比如html、css等。
1.2 CGI时代
CGI全称是通用网关接口(Common Gateway Interface),他属于动态页面的解决方案。
2、 Servlet时代
2.1 纯Servlet开发
SUN公司刚刚推出JavaEE(Java企业版)时,推出了Servlet这个东西,命名就是Service+Applet,即服务小程序。Servlet可以说是Java技术中最早的Web解决方案,Servlet与普通Java类的编写非常类似。在Servlet中可以通过挨着行输出Html等语句来实现页面的样式和输出,数据的动态功能当然也就实现了。表现、逻辑、控制、业务全部混在Servlet类中。
3、 Jsp的出现
3.1 纯JSP开发
Servlet是在Java代码中写HTML代码。与之对应的就是在HTML代码中写Java代码,这就是JSP。
经过纯Servlet开发的噩梦之后,Sun公司又推出(或者说是倡导)了JSP技术,全称是Java Server Page,JSP中采用HTML语言直接生成界面,还可以在界面中使用<% %>脚本标识嵌入Java代码,揪其本质也是最终生成一个Servlet类来编译解析。如果要开发具有大量网页内容的网站,可以先使用网页编辑工具编写网页,然后在网页中嵌入处理代码即可。
3.2 JSP+JavaBean(Model1)
这种开发模式有一个简单的分层 JSP:表现层、控制层 JavaBean:模型层 利用我们现在熟悉的MVC模型的思想去看,虽然编写代码十分容易,但Jsp混淆了MVC模型中的视图层和控制层,高度耦合的结果是Jsp代码十分复杂,后期维护依旧困难。
3.3 Servlet+JSP+JavaBean(Model2 时代)
在这种开发模式下,JSP页面中就可以不用任何的<%%>语句了,包括<%=%>全部用EL表达式来代替,列表的遍历和条件判断等(Java中的for循环和if语句)也可以通过JSTL来代替。 这样的话视图层相比较之前的开发模式来说要薄得多的多,JSP中不涉及任何的业务逻辑,前端人员修改样式也十分方便。这里可以理解为JSP为MVC设计模式中的V,即视图。
控制层通过Servlet来实现,获取前台传的参数、控制页面跳转,封装对象、向前台传输对象或者参数。并且可以由自己设计,设法用一个Servlet类实现该模块的所有功能的页面跳转。这里可以理解为Servlet为MVC设计模式中的C,即控制器。
但这里要说明的是Model2并不是一个完全标准的MVC设计模式,因为JavaBean还过于臃肿,并不能完全作为M层存在,所以将JavaBean再一次进行分割:业务逻辑、数据持久化。
4 、 框架阶段
倡导了MVC思想的jsp+javabean+servlet出现,也存在问题:
1)jsp页面中嵌入了很多java代码,使得结构很乱;
2)对于大型项目,servlet过多,转向频繁,流程,配置等不易集中管理,因而出现了struts
4.1、Struts的出现
2001年6月,struts1.0出现,struts针对jsp推出了一套struts标签,从而使得jsp中没有了Java代码,结构清晰,功能强大。针对servlet,它提供了Action类来代替了servlet,这个Action类具有servlet的功能,并且能够进行一些请求过滤和自动转码的功能。
4.2、Spring的出现
原本已经看起来很完美了,但是又有一个问题,就是我们在Action调用DAO、Java bean等对象的时候都需要在自身代码中构建它们的对象来使用,这样增加了程序的耦合性,这与我们:“高内聚、松耦合”的思想不符合,那么怎么解决这个问题呢?因而出现了Spring框架。
Spring框架有两大功能:IOC(控制反转)和AOP(面向切面的编程),其中IOC就是说:当一个类中想要调用另外一个类的对象时,不需要再通过new 关键字来创建,而是由Spring框架来负责:创建、分配和管理,从而降低了程序中的耦合性。而AOP可以用来做一些日志的打印和输出,用于提示程序执行过程中的一些具体信息等。
4.3、SpringMVC的出现
SpringMVC通过“基于注解”的方式代替了struts,并且通过Controller类来代替和实现了Action的功能。由于是基于注解的,所以很多的配置信息放在了Controller类中配置,从而降低了.xml文件的配置复杂度。
4.4、Springboot的出现
SpringMVC依然
————————————————
版权声明:本文为CSDN博主「桃花·心木」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43421035/article/details/119711706
java的servlet实现是自己规定了一套协议,与 CGI和fastcgi协议不同。 Servlet与CGI的区别 对比一:当用户浏览器发出一个Http/CGI的请求,或者说调用一个CGI程序的时候,服务器端就要新启用一个进程(而且是每次都要调用),调用CGI程序越多(特别是访问量高的时候),就要消耗系统越多的处理时间,只剩下越来越少的系统资源,对于用户来说,只能是漫长的等待服务器端的返回页面了,这对于电子商务激烈发展的今天来说,不能不说是一种技术上的遗憾。 而Servlet充分发挥了服务器端的资源并高效的利用。每次调用Servlet时并不是新启用一个进程,而是在一个Web服务器的进程中共享和分离线程,而线程最大的好处在于可以共享一个数据源,使系统资源被有效利用。 对比二:传统的CGI程序,不具备平台无关性特征,系统环境发生变化,CGI程序就要瘫痪,而Servlet具备Java的平台无关性,在系统开发过程中保持了系统的可扩展性、高效性。 对比三:传统技术中,一般大都为二层的系统架构,即Web服务器+数据库服务器,导致网站访问量大的时候,无法克服CGI程序与数据库建立连接时速度慢的瓶颈,从而死机、数据库死锁现象频繁发生。而Servlet有连接池的概念,它可以利用多线程的优点,在系统缓存中事先建立好若干与数据库的连接,到时候若想和数据库打交道可以随时跟系统"要"一个连接即可,反应速度可想而知。 Java Servlet为什么不做成FastCGI模式? 1、JVM多线程架构健壮性非常强 理论上多进程确实健壮性更强,但实际上,JVM进程远比普通C/C++进程坚固。 用C/C++写程序,随便一个空指针、内存越界、内存泄漏就可能意外终止进程,更遑论很多C/C++程序处理严重错误的方式都是很粗暴的exit或者panic。 而用Java写代码,要想不小心终止进程很难。异常机制可以保证几乎没有任何Java代码能够直接干掉一个线程或进程,Java程序的线程几乎跟普通C/C++的进程一样脆弱/坚固。 2、Tomcat静态文件性能并不差 别的Servlet容器不清楚,但是得益于独立的connector设计,较新版本的Tomcat有了NIO、APR等技术的加持,静态文件性能不会比apache httpd差到哪儿去。 “很多网站直接用servlet容器当web服务器”,因为这样很简单,而且暂时可能没遇到或不关心性能瓶颈。 3、Servlet容器与FastCGI程序之间并没有那么大的差异 关于线程模型,实际上FastCGI规范也允许应用服务进程复用同一个监听端口,多线程并行处理请求,跟Servlet没太大区别。 FastCGI规范的核心,是应用服务程序如何与Web服务器通信。Servlet容器进程跟独立Web服务器进程之间,通过套接字通信,应用层协议主要是HTTP和AJP。而FastCGI应用程序进程跟Web服务器进程也是两个进程,也通过套接字通信,不同的也就应用层是FastCGI协议而已。 当然,FastCGI规范不仅仅包含了一个应用层通信协议,还要求应用程序进程是Web服务器进程的子进程,生命周期受Web服务器管理。
JAVA、GO是如何实现web开发的? 将CGI封装起来,供调用。 CGI用来写http接口的一种技术. BOA 服务器是一个小巧高效的web服务器,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高。 Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接 请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速 tomcat: http://***/**.cgi tcc/tcc tect.c -o tect.cgi --tect.c---------------- #include <stdio.h> #include <stdlib.h> int main(void) { printf("Content-Type: text/html;charset=utf-8\r\n\r\n"); printf("hello"); return 0; } -------------- cgi全局变量 getenv("REQUEST_METHOD"); getenv("QUERY_STRING"); REMOTE_USER REMOTE_HOST GATEWAY_INTERFACE CGI版本(CGI/1.1) url编码 汉字转%E5%E6 -------------- char username[64]; char pwssword[64]; sscanf(getenv("QUERY_STRING"),"src=%[^&]&source=%s",username,password); 取用户密码 ----- char username[64]; gets(username); //可以从form submit提交的内容保存到username