Java Web开发(一)说说Tomcat

开发web应用肯定要用到web服务器,那么这次就聊聊java的Tomcat服务器。

Tomcat到底是什么?

打开Tomcat官网,首先第一句话是:The Apache Tomcat® software is an open source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket technologies.其实第一次接触Tomcat的人是看不明白这句话的。

那我们就先来聊聊http服务器吧,以下是网上摘来的一段使用python语言、原生socket写的一个非常简单的http服务器代码:

#!/usr/bin/python  
import socket  
import signal  
import errno  
from time import sleep   
  
  
def HttpResponse(header,whtml):  
    f = file(whtml)  
    contxtlist = f.readlines()  
    context = ''.join(contxtlist)  
    response = "%s %d\n\n%s\n\n" % (header,len(context),context)  
    return response  
  
def sigIntHander(signo,frame):  
    print 'get signo# ',signo  
    global runflag  
    runflag = False  
    global lisfd  
    lisfd.shutdown(socket.SHUT_RD)  
  
strHost = "172.20.52.163"  
HOST = strHost #socket.inet_pton(socket.AF_INET,strHost)  
PORT = 20014  
  
httpheader = '''\ 
HTTP/1.1 200 OK 
Context-Type: text/html 
Server: Python-slp version 1.0 
Context-Length: '''  
  
lisfd = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  
lisfd.bind((HOST, PORT))  
lisfd.listen(2)  
  
signal.signal(signal.SIGINT,sigIntHander)  
  
runflag = True  
while runflag:  
    try:  
        confd,addr = lisfd.accept()  
    except socket.error as e:  
        if e.errno == errno.EINTR:  
            print 'get a except EINTR'  
        else:  
            raise  
        continue  
  
    if runflag == False:  
        break;  
  
    print "connect by ",addr  
    data = confd.recv(1024)  
    if not data:  
        break  
    print data  
    confd.send(HttpResponse(httpheader,'index.html'))  
    confd.close()  
else:  
    print 'runflag#',runflag  
  
print 'Done'

这段代码很简单就是创建一个socket并进行监听,并在收到请求后返回html。

其实所有的http服务器都是如此,将原生socket进行封装并根据http协议的要求进行实现,python就有诸如BaseHTTPServer、SimpleHTTPServer这样的参考实现,它们实现了http协议里规定的一些基本功能。

那么Tomcat也是一样的,它是一款http应用服务器,当然它实现的功能要比python的BaseHTTPServer多得多,至于Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket则是它所遵循的一些技术标准因为除了Tomcat之外,java系的应用服务器还有Jetty等,为了降低大家的学习成本、方便使用,Tomcat和Jetty都遵循Java Servlet标准,这样大家在调用的时候函数名称、参数基本都是一样的,只是内部实现不同。

通过以上介绍现在我们应该明白,Tomcat和Nginx、Apache之类的Web服务器并不属于同一级别的东西,后两者放在整个服务应用的最前面它们可以对接多种后端语言开发的应用,而Tomcat显然不是用于干这些的,它往往用于开发内网的应用或者与Nginx、Apache对接做面向公网的应用。

下一篇将介绍Tomcat实现的Servlet容器。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容