美文网首页
Java Web开发(一)说说Tomcat

Java Web开发(一)说说Tomcat

作者: 转工 | 来源:发表于2017-01-26 12:39 被阅读0次

    开发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容器。

    相关文章

      网友评论

          本文标题:Java Web开发(一)说说Tomcat

          本文链接:https://www.haomeiwen.com/subject/kjibbttx.html