极客进化岛
技术自由路

【Linux】循序渐进学运维-服务篇-与tomcat相关的概念

文章目录

什么是JSP?
什么是中间件?
什么是动态数据,什么是静态数据
什么是JVM?
类似tomcat,发布jsp运行的web服务器还有哪些?
tomcat的三个端口作用
总结

什么是JSP?

很多2020年的java人员都说jsp已经不香了,太老了,不过目前一些比较老的项目还在使用JSP。现在JSP已经慢慢的被常见的模板引擎替代了,比如freemarker,其实和JSP差不多,只是性能要比JSP好。

JSP的全名叫 java server pages. java服务器页面。 是一种文本程序,特点就是HTML和java代码共同存在。 一开始JSP这种神器出现是为了简化servlet的工作。 因为servlet输出HTML非常困难。而JSP就是为了替代Servlet输出HTML而存在的。

tomcat访问资源,其实都是在访问servlet,而JSP本身就是一种servlet。而servlet是用java语言编写的服务器端程序,主要功能是和浏览器交互,生成页面展示。

一开始的servlet:

public class HelloWorld extends HttpServlet {  
        public void doGet(HttpServletRequest request, HttpServletResponse response)  
                throws ServletException, IOException {  
            response.setContentType("text/html");  
            PrintWriter out = response.getWriter();  
            out.println("<html>");  
            out.println("<head>");  
            out.println("<title>Hello World</title>");  
            out.println("</head>");  
            out.println("<body>");  
            out.println("<h1>Hello World!</h1>");  
            out.println("</body>");  
            out.println("</html>");  
        } 
    }  

改进后的servlet

public class List_book extends HttpServlet {          
     public void doGet(HttpServletRequest request, HttpServletResponse response)  
             throws ServletException, IOException {  
        //声明一个ArrayList.用来存放Book类中的数据  
         ArrayList<Book> list = new ArrayList<Book>(); 
         for(int i=0;i<10;i++){
                      Book book = new Book();  
         book.setName(res.getString("name"+i));  
         book.setAuthor(res.getString("author"+i));  
         list.add(book);  
         }
         //将list数据发送到.jap文件中  
         request.getRequestDispatcher("ListBook.jsp").forward(request, response);  
     }  
}  

可以看到servlet没有一点htmldiamante,数据都交给jsp来处理。

jsp长这样:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%String path = request.getContextPath();%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>  
    <head>   
         <meta http-equiv="pragma" content="no-cache">  
         <meta http-equiv="description" content="This is my page">  
        <script></script> 
    </head>  
     <body>       
         <% ArrayList list = (ArrayList) request.getAttribute("list");  %>      
         <h2 align = "center">图书列表</h2>  
         <table border = 1px align = "center">      
             <tr><th>图书名称</th><th>图书作者</th></tr>    
            <!-- 继续使用jsp语句 循环放入存放于list中的Book实体类中的数据 -->     
            <%              
             for(int i = 0;i<list.size();i++){      
                 Book book =(Book) 
                list.get(i);%>          
                <tr><th><%=book.getName() %></th><th><%=book.getAuthor()%></th><tr> 
             }
            %>  
         </table>  
    </body>
 </html>

在html里面写java代码。我们可以这么理解,jsp就是servlet,只不过servlet把一些业务功能剥离开来交给了或者是形成了jsp.

jsp的缺点:
– 动态和静态资源放在一起,用户体验感差
– jsp无法使用nginx
– jsp出现问题需要前后端一起上阵解决,效率太低
– jsp页面足够复杂,不好维护
所以后来为了解决这一问题,出现了前后端分离,

什么是中间件?

中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。
事实上我们为了解决某一类复杂的技术问题,其实都可以通过一个中间件去解决。中间件实现了不同技术之间的共享资源,实现应用间的互联与操作。

不涉及到直接给客户提供业务价值的软件都是中间件,比如nginx,mysql其实都是中间件,而OA系统这种能够直接让用户使用,提供服务的才称得上不是中间件。

中间件又分为: 缓存中间件,数据库中间件,消息中间件,服务化中间件,交易中间件,调度中间件和集成中间件等。

现在有个流行的词叫技术中台,也是中间件的一种叫法。

中间件有多少? 以MQ为例: activeMQ, kafka, pulsar, rocketMQ, CMQ, TbueMQ, JMQ,QMQ,DDMQ, 还有一些不知名的MQ。 其实都是消息队列,只是各家公司基于其中一个开源产品做了二次研发起的名字,比如滴滴的DDMQ

什么是动态数据,什么是静态数据

这个很难解释,我们在tomcat这边做的是动静分离, 而这里的动静其实指的是动态请求和静态请求。

静态页面: 是一个页面对应一个内容,你打开网页前就能知道网页是什么样子。一般html,js,css央视的文件。

动态页面: 是一个一对多的访问,通过一个页面可以返回若干不同的数据,所以你在打开网站前上次打开和这次可能都会不一样。

而目前市面上的网站,几乎都是动态的。

比如知乎,豆瓣,你打开一次,就变化一次。

静态文件:图片,视频,音乐,JS,CSS,HTML
动态文件: .jsp .php(场景: 百度搜索结果,淘宝商品列表,订单首页)

什么是JVM?

JVM是java程序的运行环境,相当于java的虚拟机,Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 你可以理解为jvm,是java代码运行时候的虚拟机,但这个虚拟机这三个字只是我们的类比。

JVM定义了一套抽象的而非真实存在的机器,就像一台摸不见看不着的处理器一样存在。 如果把他转换成实体机器的话,它拥有自己的指令集,一组寄存器,一个堆栈,一个“垃圾堆”,和一个方法区。

这里不得不提一下: 人很难感知到自己感知不到的感知。

所以我们这里用的是类比,就相当于我们说内存,如果去掉内存卡这个实物, 一个没有实体但是真实存在的与内存功能相似的东西,我们就很难描述出来。

这个JVM也一样,我们可以类比成拥有自己的指令集,一组寄存器,一个堆栈,一个“垃圾堆”,和一个方法区的java虚拟机,但这个虚拟机实体并不真实存在。

或者换句话说,JVM是java程序的一个具有隐身功能的翻译官,java程序本身是不能被操作系统所识别的,而JVM就负责翻译给操作系统听。

JVM也有自己的生命周期,一般java程序开始执行的时候,jvm就运行,程序结束,JVM就跟着结束。 如果把java程序的运行比作一次外交会议的话,那这个JVM翻译官的角色是不是就容易理解了。

jvm的线程有两种: 一种是守护线程,一种是普通线程。与jvm相关的内容太多了,一个工作了三年的java人员都很多人搞不明白,何况运维只是学个tomcat。

类似tomcat,发布jsp运行的web服务器还有哪些?

  • Resin
  • jetty
  • weblogic
  • jboss

tomcat的三个端口作用

8080: http连接器的端口,就是http协议去链接访问tomcat的端口
8004: tomcat需要跟其他服务器通讯会用到AJP协议,ajp是apache提供的与其他服务器通讯的一种协议,如果要做这个协议就需要开启8004
8008: 关闭tomcat的时候用的到, 关闭tomcat,其实就是向8008发送关闭请求而已。
就像下面这样

socketChannel.open(new InetSocketAddress("127.0.0.1", 8008))
              .write(ByteBuffer.wrap("SHUTDOWN".getBytes()));

总结

这些概念虽然与tomcat本身关系不大,但是作为一个在学习运维的新手来说,是必须要理解的。 而事实上我带过的学员里面,大多都理解不了这几个概念。这也是我今天写下这个总结的原因,后续会持续改进,直到一个新手看了就能明白为止。

赞(0)
未经允许不得转载:极客进化岛 » 【Linux】循序渐进学运维-服务篇-与tomcat相关的概念