3. Tomcat

Tomcat 的安装与运行

Tomcat:常用的基于java的web应用服务器

本课程中所有的Java代码最终都需要部署到Tomcat中运行

Tomcat的配置文件是XML的

互联网公司基本上服务端程序都是跑在类Unix平台

Tomcat:源代码为Java;为开源软件

the Apache Software Foundation(Apache软件基金会)出品:制作开源软件的非盈利组织;

安装:

1. 依赖JDK(源代码为Java)

2. 下载: http://tomcat.apache.org/

编译好的二进制包 apache-tomcat-version.tar.gz

在目录下 tar xzvf filename

3. 配置环境变量 CATALINA_HOME

CATALINA是Tomcat的一个组件,该组件会调用用户的Java代码

(本机目录/Users/shenglin/Develop/apache-tomcat-8.5.9

export CATALINA_HOME=directory     // temporarily config


4. 验证安装是否成功

启动Tomcat

类Unix平台:     $CATALINA_HOME/bin/startup.sh  或

$CATALINA_HOME/bin/catalina.sh start


使用chrome验证Tomcat是否安装成功

Tomcat的默认端口是8080

在chrome地址栏里输入127.0.0.1:8080 加载后显示的便是tomcat默认主界面

--> Tomcat安装成功


Tomcat的资源:

静态资源(HTML页面)

动态资源(通过代码生成页面 --> Servlet )

--> e.g.

background:饭馆网站(卖豆浆)

创建Soymilk.html

<html>
	<body>
		<h1>Soy Milk</h1>
	</body>
</html> 

创建 WEB-INF/classes 目录

在该目录下创建com.netease包

functionality:卖面条

创建NoodleServlet.java

package com.netease;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class NoodleServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse 
		response) throws ServletException, IOException {
		PrintWriter writer = response.getWriter();

		String vegetable = request.getParameter("vegetable");

		if(vegetable == null) {
			vegetable = "Tomato";
		}

		writer.println("<html><body>");
		writer.println("<h1> Noodle with " + vegetable + "</h1>");
		writer.println("</body></html>");
	}
}

在WEB-INF下创建配置文件web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0">
	<display-name>Restaurant</display-name>
	<servlet>
		<servlet-name>noodles</servlet-name>
		<servlet-class>
			com.netease.NoodleServlet
		</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>noodles</servlet-name>
		<url-pattern>/noodles</url-pattern>
	</servlet-mapping>
</web-app>
创建完成

开始编译class NoodleServlet.java

javac -cp $CATALINA_HOME/lib/servlet-api.jar NoodleServlet.java 


(记得开启Tomcat)

找到apache-tomcat的目录--webapps

将restaurant放入webapps文件夹中

hierarchy:

在chrome里尝试访问restaurant

1. 豆浆页面(静态HTML)

地址栏输入:http://127.0.0.1:8080/Restaurant/Soymilk.html

It works!

2. 面条页面(动态Java)

地址栏输入:http://127.0.0.1:8080/Restaurant/noodles

what if: http://127.0.0.1:8080/Restaurant/noodles?vegetable=Pear

Works as well!

关闭Tomcat

$CATALINA_HOME/bin/shutdown.sh

$CATALINA_HOME/bin/catalina.sh stop


验证Tomcat是否关闭

chrome中输入上述地址,This site can't be reached.


Tomcat的组成,架构与配置部署

组成

bin/   ---   可执行文件(如startup.sh, shutdown.sh)


由于Tomcat为Java程序,故启动时可以加入参数

JVM启动参数配置 --> 通过环境变量的方式: 

环境变量JAVA_OPTS

常用参数 

-server   告诉JVM该应用为服务器应用,使JVM做一些自动优化

-Xms512m   调整JVM中初始堆内存大小

-Xmx512m   调整JVM中最大堆内存大小

e.g.


之后正常启动Tomcat即可 startup.sh

conf/   ---   配置文件


重要的配置文件 server.xml

<Server>
    <Service>
        <Connector>
	    用于接受用户请求
        </Connector>
        <Engine>  一个Service只能用有个Engine,用于处理Connector接收到的请求
            <Host>  虚拟主机
                <Context>
		    一个Context其实就是一个Web应用
                </Connext>
            </Host>
        <Engine>
    <Service>
<Server>

将Context之外包裹着的一层一层称为Container(容器)

对应的组件实现:



Connector -- 实现组件 Coyote(实现多种Connector,默认为BIO Connector)

Container -- 具体实现的组件 Catalina(之前的配置里也指的是这个)


请求处理的流程

浏览器 --- Connector ---> Container

浏览器 <--- Connector --- Container

浏览器发一个请求,请求被Connector处理(进行socket操作,从socket读取数据,对请求进行解析)

解析后的请求内容被Container(Catalina)处理,做出对应响应

响应通过Connector传递给浏览器

(Connector:完成网络相关处理

Container:执行Web应用的代码)


Connector参数配置:


port 端口号

address 监听网络请求的地址

protocol 默认HTTP/1.1

connectionTimeout 客户端连接超时时间(ms)(若客户端不关闭连接也不发送请求(此时服务器端资源被占))

acceptCount系统繁忙时(没有空闲线程存在时),新的请求需要排队,配置队列的最大值(默认为100)。若队长超过100,则请求会被拒绝。

maxConnections connector能支持的同时最大连接数(线程池中线程的数量)(达到最大值时,将没有空闲线程处理新请求)

(弹性)线程池:事先创建一定数目的线程(由于线程的创建和销毁是比较耗时的),当有任务时,从池中取出,用完后再放回池内

最小空闲线程数:minSpareThreads(当没有任务时,等待任务的线程数)

最大线程数:maxThreads

e.g.

服务器端开发NB: 改动configuration文件之前的备份

@Matt ➜ conf  cp server.xml server.xml.bak

修改server.xml文件中的conf(需重启Tomcat才会生效)

线程池:

在server.xml中已将port改为8181,已将minSpareThreads和maxThreads改为1

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="1" minSpareThreads="1"/>
    <Connector port="8181" protocol="HTTP/1.1"
               connectionTimeout="200000"
               executor="tomcatThreadPool"
               redirectPort="8443" />

重启后效果

使用curl发送请求(和使用chrome的效果是一样的)


lib/   ---   Tomcat的依赖库

logs/   ---   日志

日志的作用:记录Tomcat的运行情况(问题定位和调试)

日志分类:

系统运行日志:Tomcat的运行信息和状态

应用日志:servlet课程中讲解

访问日志:记录HTTP访问请求

如何配置访问日志:

server.xml


directory:存放日志的目录

prefix:日志文件名前缀

suffix:日志文件名后缀

fileDateFormat="yyyy-MM-dd.HH."   时间戳格式(默认yyyy-MM-dd.)

rotatable="true"  将日志文件切割(切割依据fileDateFormat指定的时间戳)

pattern:日志格式

%m:method

%a:client ip

%t:time

%s:status code

%b:byte sent

%{User-Agent}i :user agent

,etc.

输出的log文件e.g.


temp/   ---   临时文件夹(web应用执行时产生的临时文件)

work/   ---   供web应用使用(一般用来放置Tomcat运行过程中产生的一些文件)

webapps/   ---   默认的应用部署目录

如何在Tomcat中部署Web应用

手动部署:将web应用拷贝到webapps/目录下

常用部署:将web应用做成一个应用包(War包),方便共享。 

e.g.

 

总结

Tomcat的安装

Tomcat的启动与停止

Tomcat的目录结构

Tomcat的配置文件

server.xml与Tomcat的架构

Tomcat的常见配置项

Connector的配置

线程池的配置

日志的配置

部署Web应用



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值