ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2021-04-13 22:53:20  阅读:134  来源: 互联网

标签:学运 java tomcat 中间件 jsp JVM Linux JSP



文章目录


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

标签:学运,java,tomcat,中间件,jsp,JVM,Linux,JSP
来源: https://blog.51cto.com/xinsz08/2704396

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有