一、Tomcat是什么?
百度百科:Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
简单来说,Tomcat就是Java体系下的一个Web服务器软件,用于在服务端中提供Web服务的一个软件,底层用Socket通信协议,是Servlet和Jsp的一个容器
浏览器发出http请求,Tomcat提供Web服务将Servlet/jsp/html容器内的结果返回
二、Tomcat的目录结构
在Tomcat官网上(https://tomcat.apache.org/)下载,可选择解压版或安装版(开发建议使用解压版,方便调试测试),安装时候依赖JDK,需要配置好JAVA_HOME系统环境变量。
1、配置端口及应用根目录
打开conf配置文件夹,找到server.xml配置文件
找到Connetor代码段,Tomcat端口默认是port:8080端口:
`<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
找到Host代码段:
Host:一个 Host 表示一个域名/IP 配置,一个 Tomcat 可以配置多个 Host,默认有一个 localhost(表示本机)的
配置
name :域名/IP,这里使用localhost域名访问【localhost代表本机】
appBase :该域名/IP 对应的应用根目录,默认 localhost 指向的是 Tomcat 根目录中的 webapps 目录
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
虚拟主机:(多个不同域名的网站共存于一个Tomcat中)
假如不配置虚拟主机,如果需要有多个不同域名/IP的网站同时在电脑上运行,一个Tomcat运行一个域名,那么需要有多台电脑才能实现。
这个时候就可以使用虚拟主机,增加多个Host主机名,让Tomcat可以启动多个域名/IP的网站
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
<Host name="myhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
虚拟目录:
如果存在非常多的web站点目录,都放在webapps下,可能导致磁盘空间不足,也不利于管理
把web站点的目录分散到其他磁盘管理就需要配置虚拟目录
1、在其他位置下创建一个web站点目录,并创建WEB-INF目录和一个html文件
找到Tomcat目录下/conf/server.xml文件在server.xml中的节点下添加如下代码。
path表示的是访问时输入的web项目名,docBase表示的是站点目录的绝对路径
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="/MyWeb" docBase="D:\MyWeb"/> <!--插入代码段-->
</Host>
在浏览器中访问html文件
2、WEB-INF文件目录
在Tomcat给我们的例子中,根目录下webapps/examples下,有一个WEB-INF文件夹,这个文件夹对应客户端是不可见的,因此css,javascript和图片等资源文件不能放在WEB-INF下
三、Tomcat访问文件
1、静态文件
Tomcat对应的webapps的文件目录是ROOT文件夹,而不是webapps文件夹。
如果把html等静态文件放在webapps文件夹下则无法访问成功(404显示找不到该文件)!
而如果放在ROOT文件夹内,访问返回成功
假设我们在webapps里面创建一个文件夹叫test,再访问test里面的test.html页面,能否访问成功呢?
test文件夹里的文件正常访问。
因此,在我们正式部署时,通常会把系统部署到 ROOT 文件夹中,这样访问时不用加项目文件夹名,而平时开发时,为了方便管理,应该新建项目文件夹独立放在 webapps 中,访问时需要加项目文件夹名。、
2、动态文件
利用servlet容器,动态访问Java文件内容。
我们在webapps下新建一个demo文件夹,在demo文件夹下再创建一个WEB-INF文件夹
创建classes文件夹(存放java类),web.xml配置文件
classes下新建一个DemoServlet.java文件并编译成java类
//DemoServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class DemoServlet extends HttpServlet{
//Get请求
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
request.setCharacterEncoding("UTF-8");//设置请求解析编码
response.setCharacterEncoding("UTF-8"); //设置回复格式编码
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
//输出html代码到客户端
out.println("<html><head></head><body>这是一个servlet!</body></html>");//
out.close();
}
//Post请求
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
doGet(request,response); //调用Get请求方法
}
}
这个时候还需要配置web.xml配置文件,让Tomcat知道如何访问你的文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5">
<!-- 网站配置文件 -->
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>DemoServlet</servlet-class> <!--调用的类名-->
</servlet>
<servlet-mapping>
<servlet-name>Servlet</servlet-name><!--必须与servlet里面的name名字一样-->
<url-pattern>/servlet</url-pattern><!--访问链接-->
</servlet-mapping>
</web-app>
在浏览器进行访问