Tomcat是一个开源程序,使用Java语言编写,主要用于支持Java Web应用程序。
Web服务器是安装在服务器端的一款软件,把写的Web项目部署到Tomcat服务器软件中,当Web服务器软件启动后,部署在Web服务器软件中的页面就可以直接通过浏览器来访问了。Web服务器对HTTP协议的操作进行了封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。
Tomcat可以作为Web服务器使用,处理静态HTML页面。当客户端请求HTML页面时,Tomcat会接收请求并将对应的HTML页面返回给客户端。这意味着Tomcat具备了基本的Web服务器功能,可以提供静态内容的访问。Tomcat的静态内容处理能力较弱,它主要专注于处理动态Web内容。
Web应用服务器是一种特殊类型的Web服务器,用于提供运行Web应用程序的环境。Web应用服务器接收来自Web浏览器的HTTP请求,并处理与应用程序相关的特定请求,如处理业务逻辑或与数据库的交互。
Tomcat的核心功能是作为Web应用服务器,支持Java Servlet和JSP技术。通过与Servlet容器集成,Tomcat能够处理来自客户端的请求,并将请求传递给相应的Servlet进行处理。Servlet是一种Java类,可以接收请求、处理逻辑并生成动态内容。在处理完请求后,Servlet将生成的动态内容返回给Tomcat,并由Tomcat返回给客户端。
除了支持Servlet,Tomcat还支持JSP(JavaServer Pages)。JSP允许开发人员在HTML页面中嵌入Java代码,使得Web页面能够动态生成内容。当客户端请求JSP页面时,Tomcat会先将其编译成Servlet,然后执行该Servlet生成动态内容。因此,Tomcat作为Web应用服务器时,主要关注于处理动态Web内容的请求和生成动态Web内容的能力。
关注Java应用的解析和执行,为Java Web应用程序提供运行环境。
处理Java语言编写的动态网页,特别是Servlet和JSP页面。
Tomcat通过监听特定的端口(默认为8080),等待客户端的请求。一旦收到请求,Tomcat会根据请求的URL和协议类型,将其传递给相应的处理程序。
Tomcat接收到请求后,会将其解析为Java对象,以便后续的处理。解析过程中,Tomcat会提取请求中的信息,如请求方法、请求参数等。
在接收到请求后,Tomcat会根据请求的类型和内容调用相应的Java类和方法进行处理。如果请求涉及到数据库操作,Tomcat会与数据库进行交互,执行相应的SQL语句。
处理完请求后,Tomcat会生成响应对象,并将响应内容填充到响应对象中。响应内容可以是HTML页面、JSON数据或其他格式的数据。
最后,Tomcat会将响应发送回客户端。在发送响应时,Tomcat会根据客户端的协议和需求,将响应转换为相应的格式(如HTML、JSON等),并通过HTTP协议发送给客户端。
Servlet用于创建动态Web内容。它是一个可重用的组件,可以处理来自Web客户端的请求,并将响应发送回客户端。Servlet可以与JSP页面结合使用,以生成动态Web内容。JSP页面允许开发人员将Java代码嵌入到HTML页面中,以便在请求时生成动态内容。JSP页面可以被视为一种特殊的Servlet,用于生成HTML页面。
用于理解Tomcat原理和流程、有助于理解Servlet。
public class MyRequest{
//请求方法 get/post
private String requestMethod;
//请求地址
private String requestUrl;
//创建方法 作用:解析 按照请求格式
public MyRequest(InputStream inputStream) throws Exception{
//定义一个缓冲区域
byte[] buffer =new byte[1024];
//定义一个读取数据的长度
int len=0;
//定义请求的变量
String str=null;
//读取数据
if ((len=inputStream.read(buffer))>0){
str=new String(buffer,0,len);
}
//对字符串进行分割得到一个字符串的数组 \n换行
//请求头 请求行 空格 请求体
String s = str.split("\n")[0]; //取数组里的第一个 请求头这一行
//得到的格式:GET/ HTTP/1.1
//再进行切割 按空格切割
String[] params = s.split(" ");
this.requestMethod=params[0]; //GET
this.requestUrl=params[1]; //地址
}
//赋值 get set方法
public String getRequestMethod() {
return requestMethod;
}
public void setRequestMethod(String requestMethod) {
this.requestMethod = requestMethod;
}
public String getRequestUrl() {
return requestUrl;
}
public void setRequestUrl(String requestUrl) {
this.requestUrl = requestUrl;
}
public class MyResponse {
//属性 输出流
private OutputStream outputStream;
//构造器
public MyResponse(OutputStream outputStream) {
this.outputStream = outputStream;
}
//方法 响应 拼接 按照响应格式
public void write(String str) throws Exception{
StringBuilder builder=new StringBuilder();
builder.append("HTTP/1.1 200 OK\n")
.append("Content-type:text/html\n")
.append("\r\n") //空行换行必须写\r\n
.append("")
.append("body")
.append(""+ str + "
")
.append("")
.append("