Loading

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标签用于声明一个servletservlet-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应该可以在控制台看到输出。

总结几点:

  1. tomcat与Servlet交互可以进行动态页面的处理
  2. 每一个项目的Servlet的class文件存储在WEB-INF/classes
  3. 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中。

现在直接运行项目就行了。

参考

posted @ 2021-08-26 17:05  yudoge  阅读(46)  评论(0编辑  收藏  举报