简易版Tomcat服务器
1.Tomcat 服务器
1.1Tomcat 简介 Tomcat 是在 SUN 公司的 JSWDK(JavaServer WebDevelopmentKit ,是 SUN 公司推出的小型 Servlet/JSP 调试工 具)的基础上发展起来的一个优秀的 Servlet 容器,
Tomcat本身完全用 Java 语言编写。
1.2Tomcat 使用
(1) 配置 Tomcat a) JAVA_HOME Java JDK 的根目录
b) CATALINA_HOME Tomcat根目录
(2) 启动和关闭 Tomcat 启动 Tomcat 服务器:startup.bat
关闭 Tomcat 服务器:shutdown.bat
(3) 部署项目到服务器 在 webapps 目录下新建目录存放.html 面页 访问页面
1.3Tomcat目录简介
bin目录:存放了Tomcat执行的脚本目录,存放运行tomcat服务器相关的命令。 conf目录:存放tomcat服务器相关的配置文件 例如:在tomcat服务器启动的时候,会绑定一些端口号,这些端口号就可以在配置文件server.xml文件中进行修改。 lib目录:存放tomcat服务器自带的jar包,我们也可以把其他的一些jar 包也存放到这里在tomcat中同时可以部署多个项目,这个多个项目可共享lib目录中 的jar包。 logs目录:存放tomcat服务器在运行过程中,所产生的日志文件。 temp目录:存放tomcat服务器在运行过程中,所产生的临时文件。 webapps目录:存放部署到tomcat服务器中的web项目,把项目部署服务器里面, 其实就是放到这个目录下。 work目录:这个目录和是jsp页面相关的。
2.Tomcat 服务器运行原理
2.1Tomcat 的运行原理
客户浏览器发出要求访问特定的 Servlet 的请求。
-
(1) Tomcat服务器接收到客户请求并解析。
-
(2) Tomcat服务器创建一个 ServletRequest对象,在ServletRequest 对象中包含了客户请求信息及其他关于客 户的信息,如请求头,请求正文,以及客户机的 IP 地址 等。
-
(3) Tomcat服务器创建一个ServletResponse对象
-
(4) Tomcat服务器调用客户所请求的Servlet的service服务方 法,并且把 ServletRequst 对象和 ServletResponse 对象做为参数传给该服务方法。
-
(5) Servlet从ServletRequest对象中可获取客户的请求信息。
-
(6) Servlet利用ServletResponse对象来生成响应结果。
-
(7) Tomcat服务器把Servlet生成的响应结果发送给客户。
Tomcat服务器是servlet的一个容器。
3.手写服务器
当我们知道了Tomcat服务器及其运行原理后,我们尝试着自己手写一个服务器。
3.1 搭建项目框架
-
Request:请求
-
Response:响应
-
Server:用于服务器的启动和关闭。
-
WebApp:
-
IOUtils:用于关闭所有流。
-
Servlet:是所有的servlet(用于请求),的父类。
-
web.xml:配置文件。
4.DOM4J 解析 XML 配置文件
4.1Entity 实体类的编写
4.2Mapping 实体类的编写
4.3 解析 XML 文件
public class WebDom4j {//用于解析XML private List<Entity> entityList;//用于存储是N多Entity,而每一个Entity都是servlet-name与servlet-class private List<Mapping> mappingList;//用于存储N多Mapping,而每一个Mapping都是一个servlet-name与N多个url-pattern public List<Entity> getEntityList() { return entityList; } public void setEntityList(List<Entity> entityList) { this.entityList = entityList; } public List<Mapping> getMappingList() { return mappingList; } public void setMappingList(List<Mapping> mappingList) { this.mappingList = mappingList; } //构造方法 public WebDom4j() { entityList=new ArrayList<Entity>(); mappingList=new ArrayList<Mapping>(); } //获取Document对象的方法 private Document getDocument(){ try { //(1)创建SAXReader对象 SAXReader reader=new SAXReader(); //(2)调用read方法 return reader.read(new File("src/WEB_INFO/web.xml")); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } //------------------------------------------------------------------- public void parse(Document doc){