tomcat基本知识点与实例

Tomcat一
今天讲一下tomcat的安装和使用,当然在这之前,要先了解一下开发语言——java。
一,java基础

1,计算机语言分类:
硬件级:微码编程,汇编语言
系统级:C , C++ , ...
应用级:Java , PHP , Python , Ruby , Perl , C# , ...
程序:指令+数据
过程式编程:以指令为中心,数据服务于代码;
对象式编程:以数据为中心,指令服务于数据;
2,Java是面向对象的,面向过程和面向对象的区别:
(1)面向过程程序设计方法采用函数(或过程)来描述对数据的操作,但又将函数与其操作的数据分离开来;面向对象程序设计方法将数据和对数据的操作封装在一起,作为一个整体来处理。
(2)面向过程程序设计方法以功能为中心来设计功能模块,难于维护;面向对象程序设计方法以数据为中心来描述系统,数据相对于功能而言具有较强的稳定性,因此更易于维护。
(3)面向过程程序的控制流程由程序中预定顺序来决定;面向对象程序的控制流程由运行时各种事件的实际发生来触发,而不再由预定顺序来决定,更符合实际需要。预定顺序由运行时各种事件的实际发生来触发。
(4)面向对象程序设计方法可以利用框架产品(如MFC , Microsoft Foundation Classes)进行编程。面向对象和面向过程的根本差别,在于封装之后,面向对象提供了面向过程不具备的各种特性,最主要的,就是继承和多态。
面向对象的优点:
面向对象技术具有程序结构清晰,自动生成程序框架,实现简单,可有效地减少程序的维护工作量,代码重用率高,软件开发效率高等优点。
3,php开发技术和java开发技术应用区别:
技术性比较:
从技术架构来说,Java语言相比PHP有明显的优势,Java使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。PHP只能实现简单的分布式两层或三层的架构,而Java可以实现多层架构。数据库层、应用逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用Java的web开发技术实现了MVC的设计模式,而在业务逻辑层也有Spring框架,这些框架可以方便开发者高效、合理、科学得架构多层的商业应用。从数学运算和数据库访问速度来讲,Java的性能也优于PHP。实际上,对于跨平台的大型的企业应用系统来讲,Java几乎已经成为唯一的选择。
适用性比较:
PHP适合于快速开发,中小型应用系统,开发成本低,能够对变动的需求作出快速的反应。而Java适合于开发大型的应用系统,应用的前景比较广阔,系统易维护,可复用性较好。还有,同样功能的系统用Java开发的系统要比PHP开发的系统的价格要高。Java是纯面向对象开发,功能强大 ,分支众多,没有Java不能做的软件。C/S也好B/S也好。从功能上讲,没有语言可以和Java相比。PHP属于后起之秀,吸收了Java和C以及perl等语言的部分优点,专注互联网领域。
4,JAVA运行原理 :
Java具有跨平台的优点,在Java中引入了虚拟机制概念,即在机器 和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode)(class文件的内容),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。
运行过程为:
Java编译器(编译)-----> 虚拟机(解释执行)-----> 解释器(翻译)-------> 机器码
5,Java三大分支:
J2SE --java standard edition--标准版本,这个是下面两个的基础,一般是位于客户端的应用
J2ME --java Micro edition --一般位于嵌入式应用,例如手机游戏
J2EE --java Enterprise Edition --一般为服务器端程序的应用:例如JSP站点
6,静态网站技术和动态网站技术区别:
Web服务器习惯处理静态页面,所以需要一个程序来帮忙处理动态请求(如当前时间)。Web服务器程序会将动态请求转发给帮助程序,帮助程序处理后,返回处理后的静态结果给web服务器程序。这样就避免了web服务器程序处理动态页面。Servlet 的本质是一个帮助程序。
什么是servlet:
早期的web应用主要用于浏览新闻等静态页面,用户通过HTTP协议请求服务器上的静态页面,服务器上的web服务器软件接收到请求后,读取URI标示的资源,再加上消息报头发送给客户端浏览器,浏览器负责解析HTML,将结果呈现出来。
然而随着时间发展,用户已经不满足于仅浏览静态页面。用户需要一些交互操作,获取一些动态结果。如果基于HTTP协议实现服务器端软件增强功能太过复杂,所以需要一些扩展机制来实现用户想要的功能。早期使用的web服务器扩展机制是CGI(Common Gateway Interface,公共网关接口)。使用这种方法,用户单击某个链接或输入网址来访问CGI程序,web服务器收到请求后,运行该CGI程序 ,对用户请求进行处理,紧接着将处理结果并产生一个响应,该响应被返回给web服务器,web服务器对响应进行包装,以HTTP响应的方式返回给浏览器。
CGI程序在一定 程度上解决了用户需求。不过还存在一些不足之处,如CGI程序编写困难,响应时间较长,以进程方式运行导致性能受限。于是1997年,sun公司推出了servlet技术,作为java阵营的CGI解决方案。
Java servlet(java服务器小程序)是一个基于java技术的web组件,运行在服务器端,它由servlet容器所管理,用于生成动态的内容。Servlet是平台独立的java类,编写一个servlet,实际上就是按照servlet规范写一个java类。Servlet 被编译为平台独立的字节码,可以被动态地加载支持java技术的web服务器中运行。
Servlet容器也叫做servlet引擎,是web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应,Servlet没有main方法,不能独立运行,它必须被部署到servlet容器中,由容器来实例化和调用servlet的方法(如doGet()和doPost()),servlet容器在servlet的生命周期内包容和管理servlet。在jsp技术推出后,管理和运行servlet/JSP的容器也称为web容器。
有了servlet之后,用户通过单击某个链接或者直接在浏览器的地址栏中输入URL来访问servlet,web服务器接收到该请求后,并不是将请求直接交给servlet,而是交给servlet容器。Servlet容器实例化servlet,调用servlet的一个特定方法对请求进行处理,并产生一个响应。这个响应由servlet容器返回给web服务器,web服务器包装这个响应,以HTTP响应的形式发送给web浏览器。
Servlet容器能提供什么?
A 、通信支持:利用容器提供的方法,你能轻松的让servlet与web服务器对话,而不用自己建立servetsocket,监听某个端口,创建流等等。容器知道自己与web服务器之间的协议,所以你的servlet不用担心web服务器(如Apache)和你自己的web代码之间的API,只需要考虑如何在servlet中实现业务逻辑(如处理一个订单)。
B、生命周期管理:servlet容器控制着servlet的生与死,它负责加载类、实例化和初始化servlet,调用servlet方法,以及使servlet实例被垃圾回收,有了servlet容器,你不需要太多的考虑资源管理。
C、多线程支持:容器会自动为它所接收的每个servlet请求创建一个新的java线程。针对用户的请求,如果servlet已经运行完相应的http服务方法,这个线程就会结束。这并不是说你不需要考虑线程安全性,其实你还会遇到同步问题,不过这样能使你少做很多工作。
声明方式实现安全:利用sevlet容器,你可以使用xml部署描述文件来配置和修改安全性,而不必将其硬编码写到servlet类代码中。
D、JSP支持:servlet容器负责将jsp代码翻译为真正的java代码。
7,JVM运行时区域:
方法区:线程共享 ;用于存储被JVM加载的class信息、常量、静态变量、方法等;
堆:是jvm所管理的内存中占用空间最大的一部分;也是GC管理的主要区域;存储对象;
Java栈:线程私有,存储线程自己的局部变量;
PC寄存器:线程私有的内存空间,程序的指令指针;
本地方栈:

8,
二,java环境的搭建:
1, yum install -y java-1.8.0-openjdk-devel.x86_64
下载jdk安装包,并安装。
rpm -ivh jdk-8u144-linux-x64.rpm
安装完成后,配置JAVA_HOME环境变量,指向java的安装路径;
[root@localhost java]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH

[root@localhost java]# . /etc/profile.d/java.sh
[root@localhost java]# echo $JAVA_HOME
/usr/java/latest

三,TOMCAT
1,Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的servlet和JSP规范部是能在Tomcat中得到体现,Tomcat 5支持最新的Servlet 2.4和JSP 2.0规范。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的web应用服务器。
Tomcat服务器是一个免费的开放源代码的web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首先选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache服务器的扩展,但运行时它是独立运行的,所以当你运行Tomcat时,它实际上作为一个与Apache独立的进程单独运行的。

2.Tomcat的核心分为3个部分:
(1)Web容器---处理静态页面;
(2)Catalina --- 一个servlet容器-----处理servlet;
(3)还有就是JSP容器,它就是把JSP页面翻译成一个servlet。
Web应用服务器并不是只有Tomcat,目前公司和企业使用的web服务器还有Websphere,WebLogic,Jetty,JBoss等等,但是大多数是收费的。针对我们平时开发的大多数项目,Tomcat的性能已经能够满足我们的要求,因此大多数企业中的开发者或者小公司还是常用Tomcat作为应用服务器。

  1. JSP和servlet的区别:
    JSP出现的背景:servlet体系是基于B/S架构开发web应用程序,使用servlet类将HTTP请求和响应封装在标准java类中来实现各种web应用方案的。当大量的B/S架构程序开发出来以后出现了很多问题:首先servlet类有大量冗余代码,其次是开发servlet的没法做到有精美的页面效果。所以sun提出将服务端代码添加在已经设计好的静态页面上,经过JSP容器对JSP文件进行自动解析并转换成servlet类来交给web服务器运行。
    所以JSP在本质上就是servlet,但是两者的创建方式不一样。Servlet都是由java程序代码构成,用于流程控制和事务处理,通过servlet来生成动态网页很不直观。而JSP由HTML代码和JSP标签构成,可以方便地编写动态网页。
    另外总结一下,JSP与servlet主要有两方面的不同:
    编译:JSP修改后可以立即看到结果,不需要编译,而servlet需要编译;
    转换:JSP是动态网页开发技术,是运行在服务器端的脚本语言,而servlet是web服务器端编程技术。所以JSP运行时就是转换为servlet,也就是java程序来执行。
    通俗而言:jsp就是在html里面写java代码,servlet就是在java里面写html代码。。。其实jsp经过容器解释之后就是servlet.

Tomcat和servlet的关系:
tomcat基本知识点与实例

Tomcat是sun公司的JSWDK(JavaServer Web DevelopmentKit,是SUN公司推出的小型servlet/JSP调试工具)的基础上发展出来的一个优秀的完全由java语言编写的servlet容器;
Servlet,顾名思义,是一种运行在服务器上的小插件。Servlet最常见的用途就是扩展web服务器的功能,可作为非常安全的,可移植的、易于使用的CGI代替品。Servlet具有以下特点:
提供了可被服务器动态加载并执行的程序代码,为客服端的请求提供相应服务;servlet完全用java语言编写,因此要求运行servlet的服务器必须支持java语言,servlet 完全运行在服务哭喊 端,因此它不依赖于浏览器。不管浏览器是否支持java语言,都能请求访问服务器端的servlet;

4.Tomcat服务器接受客户请求并做出响应的过程如下:
1)客户端(通常都是浏览器)访问web服务器,发送HTTP请求。
2)Web服务器接收到请求后,传递给servlet容器。
3)Servlet容器加载servlet,产生servlet实例后,向其传递表示请求和响应的对象。
4)Servlet实例使用请求对象得到客户端的请求信息,然后进行相应的处理
5)Servlet实例将处理结果通过响应对象发送回客户端,容器负责确保响应正确送出,同时将控制返回给web服务器。
5.JRE: Java Runtime Enivronment
JDK: Java Development Kit JRE
JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境 ,是提供给想运行java程序的用户使用的。
JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole, jvisualvm等工具软件 ,还包含了java程序编写所需的文档和demo例子程序。如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。JRE根据不同操作系统和不同JRE提供商(IBM, ORACLE等)有很多版本,最常用的是Oracle公司收购sun公司的JRE版本。
6.java虚拟机、tomcat、servlet关系:
tomcat基本知识点与实例

Tomcat作为独立的web服务器来单独运行,servlet容器组件作为web服务器中的一部分而存在,这是tomcat的默认工作模式。在这种模式下,tomcat是一个独立运行java程序,需要启动一个java虚拟机(JVM)进程来运行tomcat;
7.与其他web服务结合的servlet容器用法
tomcat基本知识点与实例
在这种模式下,tomcat分为web服务器插件和servlet容器组件两部分。Web服务器插件在其它的web服务器进程外部地址空间启动一个java虚拟机,servlet容器组件在此java虚拟机中运行。如有客户端发出调用servlet请求,web服务器插件获得对此请求的控制并转发给servlet容器组件(采用IPC通讯机制,即进程间通信的一种机制)。
8.安装tomcat
二进制安装:
1)到官网下载二进制安装包(http://tomcat.apache.org/
2)tar xvf apache-tomcat-8.5.11.tar.gz -C /usr/local/
3)为方便管理,创建软链接;
ln -s /usr/local/apache-tomcat-8.5.11/ /usr/local/tomcat
4)创建环境配置脚本:
vim /etc/profile.d/tomcat.sh
export CATALINA_BASE=/usr/local/tomcat
export PATH=$CATALINA_BASE/bin:$PATH
5)如果不能执行,则赋予执行权限:
chmod +x /etc/profile.d/tomcat.sh
6)加载环境配置:
source /etc/profile.d/tomcat.sh或. /etc/profile.d/tomcat
7)启动tomcat:
catalina.sh start
8)查看tomcat是否正常启动:
tomcat基本知识点与实例
Yum方式安装:
1)yum install tomcat -y #安装tomcat主程序
2)yum install -y tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps #安装tomcat对应的页面
3)mkdir /var/lib/tomcat/webapps/{ROOT,test}/{WEB-INF,META-INF,classes,lib} -pv #创建页面所需要的工作目录

9.tomcat的目录结构:
bin : 脚本,及启动时用到的类;
conf : 配置文件目录;
lib : 库文件,java类库,jar;
logs : 日志文件目录;
temp : 临时文件目录;
webapps : webapp的默认目录;
work : 工作目录,存放编译后的字节码文件。
10.普通用户启动方式(假设tomcat是关闭的)
1)useradd -r tomcat
2)chown -R tomcat.tomcat /usr/local/tomcat
3)su - tomcat -c ‘catalina.sh start’
4)这样tomcat就以普通用户开启了。
11.rpm包安装的程序环境:
配置文件目录:/etc/tomcat
主配置文件:server.xml
webapps存放位置:/var/lib/tomcat/webapps/
examples
manager
host-manager
docs
Unit file: tomcat.service
环境配置文件:/etc/sysconfig/tomcat
12.tomcat的配置文件构成:
server.xml : 主配置文件;
web.xml : web应用程序描述文件,可以设置tomcat支持的文件类型,都是关于是web应用程序的配置文件
context.xml :可以用来配置数据库之类的信息
tomcat-users.xml :用户认证的账号和密码文件;角色(role),用户(user);此文件在tomcat启动时被装入内存;
catalina.policy :当使用-security选项启动tomcat时,用于为tomcat设置安全策略;
catalina.properties :java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数;
logging.properties :日志系统相关的配置;
13:server.xml配置文件
1)Server: server表示整个的catalina servlet容器。Tomcat提供了server接口的一个默认实现,这通常不需要用户自己去实现。在server容器中,可以包含一个或多个service组件。代表tomcat instance,即表现出的一个java进程;监听在8005端口,只接收“SHUTDOWN”。各server监听的端口不能相同,因此,在同一物理主机启动多个实例时,需要修改其监听端口为不同的端口;
2)service : service是存活在server内部的中间组件,它将一个或多个连接器(connector)组件绑定到一个单独的引擎(Engine)上。用于实现将一个或多个connector组件关联至一个engine组件;
3)connector组件 :连接器(connector)处理与客户端的通信,它负责接收客户请求,以及向客户返回响应结果。在tomcat中,有多个连接器可以使用。常见的有三类http/https/ajp;
4)engine组件:在tomcat中,每个service只能包含一个servlet引擎(engine)。引擎表示一个特定的service的请求处理流水线。作为一个service可以有多个连接器,引擎从连接器接收和处理所有的请求,将响应返回给适合的连接器,通过连接器传输给用户。Servlet实例,即servlet引擎,其内部可以一个或多个host组件来定义站点;
5)host组件: 位于engine内部用于接收请求并进行相应处理 的主机或虚拟主机类似nginx server
context组件 一个context表示了一个web应用程序,运行在特定的虚拟主机中,一个host可以包含多个context(代表web应用程序)类似nginx location
tomcat基本知识点与实例
14.server.xml请求举例:
1),用户点击网页内容,请求被发送到本机端口8080,被在那里监听的coyote HTTP/1.1 Connector获得
2)Connector把该请求交给它所在的service的engine来处理,并等待engine的回应。
3)engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机host。
4)engine匹配到名为localhost的host(即使匹配不到也把请求交给该host处理,因为该host被定义为该engine的默认主机),名为localhost的host获得请求/test/index.jsp,匹配它所拥有的所有的context。Host匹配到路径为/test的context。
5)path=”/test”的context获得请求/index.jsp,寻找出对应的servlet。Context匹配到URL PATTERN为*.jsp的servlet,对应于jspServlet类。
6)构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet()或doPost(),执行业务逻辑、数据存储等程序。
7)Context把执行完之后的HttpServletResponse对象返回给Host。
8)Host把HttpServletResponse对象返回给engine
9)engine把HttpServletResponse对象返回Connector
10)connector把HttpServletResponse对象返回给客户Browser

  1. 每一个组件都由一个java“类”实现,这些组件大体可分为以下几个类型:
    顶级组件:server
    服务类组件:service
    连接器组件:http , https , ajp ( apache jserv protocol )
    容器类:engine , host , context 部署应用程序的组件
    被嵌套类:value , logger , realm , loader , manager , ...
    集群类组件:listener , cluster , ...
    其组织结构为:
    <server>
    <service>
    <connector/>
    <connector/>
    ...
    <engine>
    <host>
    <context/>
    <context/>
    ...
    </host>
    <host>
    ...
    </host>
    </engie>
    </service>
    </server>
    16.tomcat配置文件
    JSP WebAPP的组织结构:
    /: webapps的根目录
    index.jsp : 主页;
    ...
    WEB-INF/ : 当前webapp的私有资源路径;通常用于存储当前webapp的web.xml和context.xml配置文件;
    META-INF/ : 类似于WEB-INF/;
    classes/ :类文件,当前webapp所提供的类;
    lib/ :类文件,当前webapp所提供的类,被打包为jar格式;
    Webapp归档格式:
    .war:Web应用程序归档,webapp;
    .jar : java应用程序归档,EJB的类打包文件(类库);
    .rar :资源适配器类打包文件;
    .ear : 企业应用程序归档包,企业级webapp;
    简单实现一个站点:
    在/usr/local/tomcat/webapps/建一个目录,里面写上文件,在浏览器中输入ip+端口号,就可以访问了
    实例:
    [root@localhost webapps]# pwd
    /usr/local/tomcat/webapps
    [root@localhost webapps]# mkdir test
    [root@localhost webapps]# cd test
    [root@localhost test]# vim index.jsp
    <%@ page language="java" %>
    <%@ page import="java.util.*" %>
    <html>
    <head>
    <title>Test Page</title>
    </head>
    <body>
    <% out.println("hello world");%>
    </body>
    </html>
    访问:
    tomcat基本知识点与实例
    17.如何实现访问日志:
    Tomcat的日志类:
    %a -远程IP地址
    %A - 本地IP地址
    %b - 发送的字节数,不包括HTTP头,或“ - ”如果没有发送字节
    %B - 发送的字节数,不包括HTTP头
    %h - 远程主机名
    %H - 请求协议
    %l (小写的L)- 远程逻辑从identd的用户名(总是返回' - ')
    %m - 请求方法
    %p - 本地端口
    %q - 查询字符串(在前面加上一个“?”如果它存在,否则是一个空字符串
    %r - 第一行的要求
    %s - 响应的HTTP状态代码
    %S - 用户会话ID
    %t - 日期和时间,在通用日志格式
    %u - 远程用户身份验证
    %U - 请求的URL路径
    %v - 本地服务器名
    %D - 处理请求的时间(以毫秒为单位)
    %T - 处理请求的时间(以秒为单位)
    %I (大写的i) - 当前请求的线程名称
    如图所示:

tomcat基本知识点与实例
tomcat基本知识点与实例
tomcat基本知识点与实例
18.tomcat的部署
部署(deploy)webapp的相关操作:
Deploy:将webapp的源文件放置于目标目录(网页程序文件存放目录),配置tomcat服务器能基于web.xml和context.xml文件中定义的路径来访问此webapp;将其特有的类和依赖的类通过class loader装载至JVM;
部署有两种方式:
自动部署:auto deploy
手动部署:
冷部署:把webapp复制到指定的位置,而后才启动tomcat;
热部署:在不停止tomcat的前提下进行部署;

部署工具:manager , ant脚本,tcd(tomcat client deployer)等;
Undeploy:拆除(反部署),停止webapp,并从tomcat实例上卸载webapp;
Start:启动处于停止状态的webapp;
Stop:停止webapp,不再向用户提供服务;其类依然在jvm上;
Redeploy:重新部署;
实例演示(以solo-2.2.0为例):

tomcat基本知识点与实例
tomcat基本知识点与实例
tomcat基本知识点与实例
上传之后,就会在Applications里发现有了solo-22.0,可以对此进行管理,并且在系统中也有了。
tomcat基本知识点与实例
也可以停掉(stop)或拆下来不部署(undeploy)
tomcat基本知识点与实例

19.tomcat安全配置文件:
以下是Tomcat Manager 4种角色的大致介绍(下面URL中的为通配符):
manager-gui 允许访问html接口(即URL路径为/manager/html/

manager-script 允许访问纯文本接口(即URL路径为/manager/text/
manager-jmx 允许访问JMX代理接口(即URL路径为/manager/jmxproxy/

manager-status 允许访问Tomcat只读状态页面(即URL路径为/manager/status/*)
admin-gui(HTML UI接口)或admin-script(纯文本接口)。即URL路径为/host-manager
打开下列文件:
tomcat基本知识点与实例
将以下注释改为换为第二张图:

tomcat基本知识点与实例
tomcat基本知识点与实例
tomcat基本知识点与实例

重启之后,访问以下页面,将上图中的用户与密码写入,再登录:

tomcat基本知识点与实例
tomcat基本知识点与实例

Host-Manager

需要定义才能登录访问:

tomcat基本知识点与实例
tomcat基本知识点与实例

重启tomcat服务
点击登录,如果有认证需认证才能登录

tomcat基本知识点与实例
tomcat基本知识点与实例
tomcat基本知识点与实例

转载于:https://blog.51cto.com/12038281/2045967

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值