Tomcat笔记
大三了,荒废了两年,重新学Java。。。。。。。。。
中文乱码
安装Tomcat之后,进入bin目录启动startup.bat,直接乱码。。。
去找配置文件,看这些名字,conf
应该是配置文件的目录吧,在conf
目录下发现一个可疑文件:logging.properties
,开之,又现一堆可疑代码
原先他们是UTF-8
,因为Windows的控制台是GBK,所以改成GBK就行了。
webapps目录
webapps是网站目录,其中的每一个子目录都会被Tomcat视为一个网站。
新建一个目录并向其中添加一个文件,打开浏览器输入localhost:8080/目录名/文件名
,可以访问到这个文件。
WEB-INF目录
每一个网站可以有一个WEB-INF
目录,用于保存当前站点的配置、依赖库等文件。
WEB-INF/web.xml
用于配置当前网站,现在创建这个文件,并为站点设置默认页面。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"
metadata-complete="true">
<display-name>Hello Tomcat</display-name>
<description>
My first tomcat application.
</description>
<welcome-file-list>
<welcome-file>hello.html</welcome-file>
</welcome-file-list>
</web-app>
虚拟目录
如果只能把站点配置到webapps
中,那挺难受的。虚拟目录允许你将站点映射到其他目录。
在conf\server.xml
中的Host
节点下添加
<Context path="/tomcat_webapp1" docBase="D:\source\java\tomcat_webapp1"/>
path是浏览器访问该网站的路径,docBase是该网站在硬盘上的路径。
第二个办法是进入到conf\Catalina\localhost
文件下,创建一个xml文件,该文件的名字就是站点的名字。然后xml代码如下
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="D:\web1" reloadable="true"></Context>
虚拟主机
conf/server.xml
中的Host
就是用来声明虚拟主机的。
使用Servlet
Servlet是JavaWeb开发的一套规范,主要用于处理动态页面的请求。
随便找个地方编写一个类实现Servlet接口
import javax.servlet.*;
import java.io.IOException;
public class MyFirstServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init...");
}
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig...");
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service...");
}
@Override
public String getServletInfo() {
System.out.println("getServletInfo...");
return null;
}
@Override
public void destroy() {
System.out.println("destroy...");
}
}
然后编译它。
在编译之前,请先将tomcat中的servlet-api.jar
添加到CLASSPATH中,确保Java编译器能找到Servlet类。
javac MyFirstServlet.java
然后将编译好的class文件放到网站的WEB-INF/classes
中。
然后再配置web.xml
,指定一个路径由servlet进行动态处理。
servlet
标签用于声明一个servlet
,servlet-name
用于给这个Servlet指定名称,servlet-class
用于指定这个Servlet在哪,应该是完全限定名,不过我们没有使用包,所以直接写类名即可。
servlet-mapping
标签用于将一个Servlet映射到一个符合规则的url上,当用户访问的url符合这个模式,就将处理权限移交给对应的Servlet。
<servlet>
<servlet-name>my</servlet-name>
<servlet-class>MyFirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>my</servlet-name>
<url-pattern>/fst</url-pattern>
</servlet-mapping>
现在启动Tomcat服务器,访问http://localhost:8080/项目名/fst
应该可以在控制台看到输出。
总结几点:
- tomcat与Servlet交互可以进行动态页面的处理
- 每一个项目的Servlet的class文件存储在
WEB-INF/classes
中 - tomcat会扫描项目的
web.xml
的配置中的Servlet规则,并在需要的时候去调用对应的Servlet。
Idea配置Servlet和Tomcat(2021.2版本)
虽然IDEA直接提供了这种项目的创建,但是我们还是自己造下轮子,毕竟所有的地方都得明白,不能只是跑起来就行。
首先我就创建一个普通的Java项目。
然后创建web
文件夹和WEB-INF
文件夹,并且创建Servlet。
别看我的web文件夹图标和你的不一样,因为我这是弄完之后变成这样的,之前就是一个普通的文件夹。
现在有了一个JavaWEB项目的基础架构,现在我们需要让IDEA自动帮我们完成那个编译并且放到WEB-INF/classes
并且自动运行Tomcat服务器的操作。
首先第一步
File->Settings->Build, Execution, Deployment->Application Servers
点加号添加一个Tomcat Server,变成了下面这样
至此,我们只是完成了IDEA和Tomcat服务器的绑定,并没有和项目绑定起来。
点这个Add Configuration
加号,Tomcat Local
然后点击Deployment添加自动部署功能
添加一个Artifact
,不用动即可。
我们可以点进去看看这个Artifact
的内容
正是把WEB-INF
目录一起打包并且把编译好的文件打包到WEB-INF/classes
中。
现在直接运行项目就行了。