350.tomcat认知

tomcat历史

  • 编程语言
    • 系统级:C,C++,rust(兼具系统及特性,修补C语言固有的缺陷),…开发周期长,维护苦难,性能高
    • 应用级:Java,C#,go,Python,ruby…

java或C#开发一个网站,响应用户请求,不仅要写业务逻辑层,还要实现web服务协议的细节处理,封装响应报文,处理与客户端连接的保持连接,web界面输出格式等,多了一个前端,工作量较大。后来web应用层协议的交互被编写为一个框架(库和相关工具等)。web服务器的功能(处理客户端响应报文,处理web界面的输出格式如html,与客户端交互等),做成框架,独立成一个服务,可以把客户端的请求接入服务器并路由到业务逻辑层,如tomcat,是一个独立的项目,后续程序员只要开发业务逻辑层就可以了,而不用操心与web界面的交互实现等

  • CGI:Common Gateway Interface

    客户端要与反代服务器或web服务器交互,如与反代服务器交互,但业务逻辑层的web服务器代码可能是C#,shell,java等,与反代服务器交互的协议没有统一的规范,CGI就是此种规范,能使服务器代码与反代服务器交互,只要支持CGI协议的客户端前端,都能拿来当网关使用。而如果web服务器直接使用http协议编写,则可以直接和客户端交互

    ⑴:通过Internet把用户请求送到web服务器

    ⑵:web服务器接收用户请求并交给CGI程序处理。

    ⑶:CGI程序把处理结果传送给web服务器。

    ⑷:web服务器把结果送回到用户。

    cgi百科

程序:指令+数据
  过程式编程:以指令为中心,数据服务于代码;
  对象式编程:以数据为中心,指令服务于数据;
    对象,方法(method)

  • Java
    • web服务器流行起来,Oak也去写web服务器代码
  • Oak

    • 1991年开始美国的机顶盒(iptv)比较多,Oak是写在机顶盒上运行的程序,名为橡树,只因编程人员办公室外有一个橡树。但此项目失败了
  • 前端开发:JavaScript

  • 后端开发:java,C

  • JVM

    • 一次编译,到处执行的优点,在90年代时,http协议流行时,而java尝试去编写web应用程序,使其迅速流行起来。所谓有心栽花花不开,无心栽柳柳成荫

jws是sun提供的,但asf(Apache Software Foundation)提供的jserv比jws完善,sun把jws捐给了asf,asf对比两个版本,发现各有优点,于是从头做起,此项目名为catalina。世界上有个出版社(O’Reilly)的书都极为著名,基本出版的书封面都是一个动物,而catalina的编写者受邀出版书,封面是个公猫(tomcat),由于此书后来出名了,catalina就把项目名改为了tomcat。tomcat是在jdk的基础上添加了两个企业级类库和web服务器前端的实现,把业务交给程序员完成

类似tomcat的产品如Jetty,Resin,JBoss(完善了tomcat)

tomcat:Servet,jsp两个类型

tomcat+JDK=Java SE (不是太精准)

Java:
  Sun, Green Project, Oak, James Gosling;  
  1995:Java 1.0, Write once, Run Anywhere;
  1996:JDK(Java Development Kit),包含类库(API)、开发工具(javac)、JVM(SUN Classic VM)
  JDK 1.0, Applet, AWT
  1997:JDK 1.1
  1998: JDK 1.2
  
  Sun分拆Java技术为三个方向:
  J2SE:Standard Edition
  J2EE:Enterprise Edition
  J2ME:Mobile Edition

    代表性技术:EJB,java plugin, Swing, JIT(Just In Time,即时编译)
  2000:JDK 1.3
      HotSpot VM
  2002:JDK 1.4
  2006:Sun开源了Java技术,GPL,建立一个称为OpenJDK组织;
      Java 2 SE, Java 2 EE, Java 2 ME
  2011:JDK 1.7
  2014:JDK 1.8
  2016:JDK 1.9
oracle收购了sun,百度oracle jdk下载


Servlet和JSP的区别和联系

tomcat也是一个web server,客户端浏览器可以通过http协议直接和tomcat通信,称为standlone,但这不是tomcat的强项。可以通过在tomcat前加一个反代服务器,如nginx,haproxy等(可以并发多连接),把客户端请求调度给tomcat所在后端服务器,而tomcat所在的服务器安装nginx服务器处理静态页面,同时由nginx反代功能把动态页面反代给tomcat处理动态页面。tomcat是servlet和jsp的结合产物

用Java开发Web应用程序时用到的技术主要有两种,即Servlet和JSP。 Servlet是在服务器端执行的Java程序,一个被称为Servlet容器的程序(其实就是服务器)负责执行Java程序。而JSP(Java Server Page)则是一个页面, 由JSP容器负责执行。

Servlet和JSP两者最大的区别就是,Servlet以Java程序为主,输出HTML代码时需要使用out.println函数,也就是说Java中内嵌HTML,动态输出html内容。
而JSP则以HTML页面为主,需要写Java代码时则在页面中直接插入Java代码,即HTML中内嵌Java,Java代码被动态执行后生成HTML内容

jsp和servlet的区别和联系
1.jsp经编译后就变成了Servlet.
(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)

2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.
Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。
而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。

联系:
JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。
区别:
Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来,而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑,Servlet更多的是类似于一个Controller,用来做控制。
这里写图片描述
Servlet能够很好地组织业务逻辑代码,但是在Java源文件中通过字符串拼接的方式生成动态HTML内容会导致代码维护困难、可读性差
JSP虽然规避了Servlet在生成HTML内容方面的劣势,但是在HTML中混入大量、复杂的业务逻辑同样也是不可取的

典型的例子如下:
JSP文件
代码如下:

<html>  
   <body>  
     <h1>  
     <% out.println("JSP"); %>  
     </h1>  
   </body>  
 </html> 

Servlet

代码如下:
public class MyServlet ... {  
   ...  
   out.println("<html>");  
   out.println("<body>");  
   out.println("<h1>");  

   out.println("Servlet);  

   out.println("</h1>");  
   out.println("</body>");  
   out.println("</html>");  
 } 

可见,JSP便于输出,而Servlet便于进行逻辑处理。因此实际应用中两者常常结合使用,各司其职。
而Tomcat就是上面提到的Servlet容器和JSP容器。 各个版本对Servlet/JSP协议支持的情况如下:

Tomcat版本 支持Servlet 支持JSP
6.0.x 2.5 2.1
5.5.x 2.4 2.0
4.1.x 2.3 1.2
3.3.x 2.2 1.1

Web应用程序的结构

Tomcat安装好以后, 可以去看看tomcat目录下的webapps目录。这个目录就是用来保存Web应用程序的。

上图的根目录就是应当放置在 webapps 目录下的目录。WEB-INF目录无法从浏览器中访问。 WEB-INF/classes下保存的是编译后的Java程序(主要是Servlet),WEB-INF/lib 下保存的是 运行时使用的库文件(.jar文件),web.xml则是整个应用程序的配置信息。

其他文件例如 .jsp、图片、Javascript脚本等,都可以直接放到Web应用程序的根目录下。

tomcat的思想
MVC模型

所谓MVC模型就是将数据、逻辑处理、用户界面分离的一种方法。

M(Model, 模型):用于数据处理、逻辑处理。
V(View,视图):用于显示用户界面。
C(Controller,控制器):根据客户端的请求控制逻辑走向和画面。
而在Java中,MVC这三个部分则分别对应于 JavaBeans、JSP和Servlet。

M = JavaBeans:用于传递数据,拥有与数据相关的逻辑处理。
V = JSP:从Model接收数据并生成HTML
C = Servlet:接收HTTP请求并控制Model和View

这里写图片描述
1.Web浏览器发送HTTP请求到服务端,被Controller(Servlet)获取并进行处理(例如参数解析、请求转发)
2.Controller(Servlet)调用核心业务逻辑——Model部分,有需要时获取数据,得出结果
3.Controller(Servlet)将逻辑处理结果交给View(JSP),JSP运行在model上,动态输出HTML内容
4.动态生成的HTML内容返回到浏览器显示

java编程思想(thinking in java),java疯狂讲义

猜你喜欢

转载自blog.csdn.net/csdn_immortal/article/details/82503096