Java:Tomcat是什么

Java:Tomcat是什么

1. 下载Tomcat

官网:apache-tomcat-9.0.41
安装地址:C:\Environmental\apache-tomcat-9.0.41

2. 配置环境变量

第一步,在系统环境变量中添加两个变量

变量名:CATALINA_HOME
变量值:C:\Environmental\apache-tomcat-9.0.41
变量名:CATALINA_BASE
变量值:C:\Environmental\apache-tomcat-9.0.41
第二步,在系统环境变量的 Path 中添加两个路径引用

%CATALINA_HOME%\bin
%CATALINA_HOME%\lib

3.简单的代码实现

package com.icss.itomcat;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class HttpServer extends Thread{
	
	// 服务器监听socket
	private ServerSocket serverSocket;
	
	public HttpServer(int port) {
		try {
			this.serverSocket = new ServerSocket(port);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void run() {
		while(true) {
			
			try {
				// 监听连接,返回当前连接的套接字
				System.out.println("服务器启动成功:");
				Socket clientSocket = this.serverSocket.accept();
				// 启动子线程,处理当前的socket请求
				WorkThread wt = new WorkThread(clientSocket);
				new Thread(wt).start();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new HttpServer(80).start();
	}

}

package com.icss.itomcat;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;


public class WorkThread implements Runnable{
	// 保存当前连接的套接字
	private Socket socket;
	
	public WorkThread(Socket socket) {
		this.socket = socket;
	}
	
	@Override
	public void run() {
		// TODO Auto-generated method stub
		// 处理请求数据和发送响应数据
		try {
			InputStream  in  = this.socket.getInputStream(); // 输入流,读取请求数据
			OutputStream out = this.socket.getOutputStream();// 输出流发送响应数据
			
			// 读取请求头
			String requestHeader = ""; // 保存请求头信息
			BufferedReader br = new BufferedReader(new InputStreamReader(in));
			String line = null;
			while((line = br.readLine()) != null && line.length() >0) {
				requestHeader += line + "\r\n";
			}
			// 解析请求头
			String[] headers = requestHeader.split("\r\n");
			String url = headers[0].split(" ")[1];
			
			if(url.equals("/index.html")) { // 如果请求index.html
				String filePath = this.getClass().getResource("/").getPath();
				File file = new File(filePath + "index.html");
				StringBuilder sb=new StringBuilder();
		        sb.append("HTTP/1.0 200 OK\r\n");
		        sb.append("Content-Type: text/html;charset=utf-8\r\n");
		        sb.append("X-Ua-Compatible: IE=Edge,chrome=1\r\n");
		       
		        String path = this.getClass().getResource("/").getPath();
		        System.out.println(path);
			    BufferedReader reader = null;
			    StringBuffer sbf = new StringBuffer();
			    try {
			        reader = new BufferedReader(new FileReader(file));
			        String tempStr;
			        while ((tempStr = reader.readLine()) != null) {
			            sbf.append(tempStr);
			        }
			        reader.close();
			    } catch (IOException e) {
			        e.printStackTrace();
			    } finally {
			        if (reader != null) {
			            try {
			                reader.close();
			            } catch (IOException e1) {
			                e1.printStackTrace();
			            }
			        }
			    }
			    sb.append("Content-length: ").append(sbf.toString().getBytes().length).append("\r\n");
		        sb.append("\r\n");
			    System.out.println(sb.append(sbf.toString()));
		        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
	            bw.write(sb.toString());
	            bw.flush();
			}else if(url.equals("/tomcat.png")) {   // 图片 tomcat.png
				StringBuilder sb=new StringBuilder();
		        sb.append("HTTP/1.0 200 OK\r\n");
		        sb.append("Content-Type: image/png\r\n");
		        sb.append("X-Ua-Compatible: IE=Edge,chrome=1\r\n");
		       
		        String path = this.getClass().getResource("/").getPath();
		        System.out.println(path);
				String fileName = path + "tomcat.png";
				File file = new File(fileName);
				DataInputStream fis=new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
				byte[] theData=new byte[(int)file.length()];
				fis.readFully(theData);
				fis.close();
			    sb.append("Content-length: ").append(theData.length).append("\r\n");
		        sb.append("\r\n");
			    System.out.println(sb.toString());
		        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
	            bw.write(sb.toString());
	            bw.flush();
	            out.write(theData);
	            out.flush();
			}else {
			
				// 实现最简单的应答(response)
				String responseHeader = ""; // 封装应答头
				String responseContent = "<html><head></head>"
						                      + " <body>欢迎访问XXX的个人主页"
						                      + "</body></html>"; // 封装应答的内容
				
				responseHeader += "HTTP/1.1 200 OK\r\n";
				responseHeader += "Content-Type: text/html;charset=utf-8\r\n";
				responseHeader += "Content-length: " + responseContent.getBytes().length + "\r\n";
				responseHeader += "\r\n";  // 响应头结束
				
				String content = responseHeader + responseContent; // 头和响应的内容拼在一起
				BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
				bw.write(content);
				bw.flush();
			}
		
			in.close();
			out.close();
			socket.close();
			System.out.println(requestHeader);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			
		}
	}

}

总结:

1、Tomcat是运行在JVM中的一个进程。它定义为“中间件”,顾名思义是一个在Java项目与JVM之间的中间容器。

2、Web项目的本质,是一大堆的资源文件和方法。Web项目没有入口方法(即main方法),这意味着Web项目中的方法不会自动运行起来。

Web项目部署进Tomcat的webapp中的目的是很明确的,那就是希望Tomcat去调用写好的方法去为客户端返回需要的资源和数据。

3、Tomcat可以运行起来,并调用写好的方法。那么,Tomcat一定有一个main方法。对于Tomcat而言,它并不知道用户会有什么样的方法,这些都只是在项目被部署进webapp下后才确定的。

由此,可知Tomcat用到了Java的反射来实现类的动态加载、实例化、获取方法、调用方法。但是部署到Tomcat的中的Web项目必须是按照规定好的接口来进行编写,以便进行调用。

特点:

Tomcat运行时占用的系统资源小,扩展性好,支持负载均衡与邮件服务等开发应用系统常用的功能。Tomcat是一个开源的web服务器,且是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。

对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利用它响应对HTML页面的访问请求。实际上Tomcat部分是Apache服务器的扩展,所以当你运行tomcat时,它实际上作为一个Apache独立的进程单独运行的。

当配置正确时,Apache为HTML页面服务,而Tomcat实际上运行JSP页面和Servlet。另外,Tomcat和IIS、Apache等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值