TomCat学习笔记(1)--裸Tomcat框架实现和IDEA实现的比较

TomCat是什么不多说了,这里是用来记录我学习TomCat的操作与心路历程

本文对比演示用纯Tomcat和用IDEA集成开发同样的页面效果的两种方法

在不用IDEA集成开发环境时稍微学习了一些tomcat,能写出一个界面并且用get、post函数试着传递数据。(在下文介绍一下流程并给予简单分析)
指路:https://www.runoob.com/servlet/servlet-first-example.html
(Tomcat本来就是servlet的一种,所以指到了Servlet。)

1. 回顾用裸Tomcat:

大概的梳理一下不用IDEA来使用一个Tomcat创建一个服务器管理应用:
先记事本写一段java代码,用来在Servlet基类的基础上自定义咱们自己的服务端;

// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// 扩展 HttpServlet 类
public class HelloWorld extends HttpServlet {
 
  private String message;

  public void init() throws ServletException
  {
      // 执行必需的初始化
      message = "Hello World";
  }

  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 设置响应内容类型
      response.setContentType("text/html");

      // 实际的逻辑是在这里
      PrintWriter out = response.getWriter();
      out.println("<h1>" + message + "</h1>");
  }
  
  public void destroy()
  {
      // 什么也不做
  }
}

这里就是在定义我们的服务端,当然这里代码很简单,翻译成人话就是:

无论用户从浏览器发送了什么Get请求,那么都返回一个html页面其中写着“Hello World”
保存为HelloWorld.java后关闭文件

接下来把这一段简单的服务器定义编译成一个类class
这里把HelloWorld.java放在C:\TMP下面来编译

假设已经安装好java了(JDK),但是可能没有那些java库编译的时候会报错
在这里插入图片描述
所以先把依赖库告知给JDK。

网上有很多种解法,我用最无脑的
直接在环境变量里添加CLASSPATH,让它指向把Tomcat目录下的依赖库里面的servlet-api.jar,这样java在编译的时候就会用上这个jar包(没有CLASSPATH就自己建)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可能报这个错误,是源代码编码问题,用记事本另存为ANSI就行
在这里插入图片描述
编译完成后,现在我们就有了一个HelloWorld.class
里面是我们继承的servlet类定义
现在我们把它部署到Tomcat中,复制到这个文件夹内:

在这里插入图片描述
修改上一级WEB-INF 的web.xml

<web-app>
  	    <servlet>
    	        <servlet-name>HelloWorld</servlet-name>   //servlet标识
    	        <servlet-class>HelloWorld</servlet-class>  //servlet类名
        </servlet>
  
  	    <servlet-mapping>
            <servlet-name>HelloWorld</servlet-name>  // servlet标识
   	        <url-pattern>/HelloWorld</url-pattern>  //映射用的URL
	    </servlet-mapping>
 
</web-app>

这个文件用来告诉Tomcat当访问到指定的一个URL时
映射到一个我们定义的Servlet类,在这里就是HelloWorld.class

保存后,运行Tomcat的bin/startup.bat 访问localhost:8080/HelloWorld
在这里插入图片描述

2. IDEA中的实现:

以上应该比较清楚的介绍了怎么架起一个小服务器,那么用IDEA实现相同的功能是什么流程呢
在这里插入图片描述
用这个初始配置来自动生成项目
在这里插入图片描述
会发现是这样的目录结构,web.xml和WEB-INF很眼熟,但是index.jsp是什么,classes文件夹怎么也没了?

在这里,xxx.class这类的源代码文件 应当存放在src文件夹内,所以在src中新建一个一个Java Class文件。取名

classes.HelloWorld

在这里插入图片描述
Enter 后就有了一个Java Class文件
在这里插入图片描述
这里src是无法直接创建文件夹的,要在起名的时候带入路径
这个HelloWorld和之前写HelloWorld.java是一样的 直接黏贴代码

在这里插入图片描述
接下来一样 去写web.xml
在这里插入图片描述
和刚刚黏贴的代码唯一不同就是servlet类名要包括路径。

运行

在这里插入图片描述
在这里插入图片描述
自动跳出来的就是index.jsp写的html,在地址栏后面添加/HelloWorld
在这里插入图片描述
就能访问我们的Servlet返回的html
(项目地址可以在Configuration的Deployment中修改)
在这里插入图片描述

3. 总结:

上面实现的Tomcat两个页面效果一样,但是实现过程,显然在IDEA中更加紧凑,而且依赖包不用手动配置(以后还能用在IDEA里面用Maven自动导入依赖包)

但是IDEA为了统一整合,自带了一个项目外壳,用index.jsp呈现,访问路径在Configuration-Delpoyment中设置,这其实是一种方便,只不过可能对像我这样还没写几个Tomcat代码的小朋友比较confusing。写下来记录着。

热门文章

暂无图片
编程学习 ·

NASM系列啊

文章目录NASM是什么?NASM下载与安装 NASM是什么?The Netwide Assembler, 一款基于80x86和x86-64平台的汇编语言编译程序, 是为了实现编译器程序跨平台和模块化的特性。 NASM支持大量的文件格式,包括Linux,*BSD,a.out,ELF,COFF,Mach−O,Microsoft 16−bit OBJ,Win32…
暂无图片
编程学习 ·

POJ练习题之:败方树

问题描述 给定一个整数数组,要求对数组中的元素构建败方树(数组相邻元素两两比较,从第一个元素开始)。之后修改数组中的元素,要求输出初始构建以及修改后得到的败方树的所有内部结点代表的整数(从左到右从上到下输出) 输入 第一行为数组的元素个数n和修改的次数m。 第二行…
暂无图片
编程学习 ·

springboot+idea+bootstrap的带有图片的表格编辑操作

前面已经写了 批量导入,图片显示,现在写的是批量修改,后面会写用echarts+springboot 做折线图,有时间贴上 1、jsp代码如下,编辑按钮formatter: function (value, row, index) {var edit = <input class="btn btn-primary" type="button" value=&qu…
暂无图片
编程学习 ·

Linux安全原理简介

Linux安全原理简介介绍在设置Linux计算机的所有阶段,安全性应是首要考虑之一。要在计算机上实施良好的安全策略,需要对Linux的基础知识以及所使用的某些应用程序和协议有充分的了解。Linux的安全性是一个非常重要的主题,并且有许多有关此主题的完整书籍。我不能在本教程中介…
暂无图片
编程学习 ·

记录 之 最近阅读的动作识别(action recognition)工作

介绍:其中C3D是3d卷积的比较有意义的开端,I3d在C3D之后做了一系列研究,包括引入双流网络,和LSTM网络,并使用已经训练好的2D图像分类模型的参数维数扩充后用做3D网络的预训练模型。S3D是在I3D的基础上,探索了卷积拆分,使得模型的量级下降,并在后续的工作中加入了Graph C…
暂无图片
编程学习 ·

1084:幂的末尾 题解 信息学奥赛 NOIP

关于内容来源于微信公众号:大神编程。已经过原文作者授权。题目:1084:幂的末尾超详细动画图文题解链接题解目录(不断更新中)喜欢信息学奥赛的同学们,可以一起交流学习哦官方QQ群:893157498我的QQ群:795233394
暂无图片
编程学习 ·

Vue之处理边界情况

处理边界情况All the features on this page document the handling of edge cases,meaning unusual situations that sometimes require bending Vue’s rules a little. Note however, that they all have disadvantages or situations where they could be dangerous.特殊情…
暂无图片
编程学习 ·

前端React实现fetch取消、中止请求

场景: 项目开发过程中有时会遇到这种情况:两次查询请求相隔时间很短时,由于接口异步,第一次请求可能会覆盖第二次请求返回数据,所以需要在第二次请求前先将第一次请求中止,话不多说,实现如下: 关于axios取消请求网上有很多,可自信百度,本文主要针对于fetch请求,由于…
暂无图片
编程学习 ·

小程序全局socket使用 并自定义发送心跳

//app.js App({globalData: {userInfo: nullsocketUrl:"wss:.....",//socketUrl//延迟timeout: 10000,socketHeartTimer: null,//socket连接回调函数callback: function () {},//socket连接定时器socketClientTimer: null,//当前socket是否连接isSocketConnect: fals…
暂无图片
编程学习 ·

http相关

http相关下载文件 下载文件 //处理中文文件名乱码if (request.getHeader("User-Agent").toUpperCase().contains("MSIE") ||request.getHeader("User-Agent").toUpperCase().contains("TRIDENT")|| request.getHeader("User-Agen…
暂无图片
编程学习 ·

兔(图)解之初识贪心算法

嗯,好想她呀....加油生活。 希望她好好的....剪绳子 给你一根长度为 n 的绳子,请把绳子剪成 m 段(m、n 都是整数,n>1 并且 m>1),每段绳子的长度记为 k[0],k[1],...,k[m]。请问 k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是 8 时,我们把它剪成 …
暂无图片
编程学习 ·

面试直击之javaSE复习——IO

1.什么是IO流?IO流是一种从源头到目的地的数据流,即以流的方式进行输入和输出。比如文件拷贝,输入流从文件中读取数据存储到进程中,输出流从进程中读取然后写入到目标文件。2.Java中有几种类型的流?按照流的方向:输入流(inputStream)和输出流(outputStream)。按照实现功…
暂无图片
编程学习 ·

Java数据结构--顺序栈

一、简介 1.1 概念栈:又称为堆栈,是限制在表的一端进行插入和删除的线性表。其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行插入、查找、删除等操作。 表中进行插入、删除操作的一端称为栈顶、栈顶保存的元素称为栈顶元素。相对的,表的另一端称为栈底…
暂无图片
编程学习 ·

Leetcode刷题链表预备知识(C)

Leetcode里的head指针指向实实在在的链表第一个结点,该结点不是哨兵结点。 对链表处理完之后,链表成为空链表,则head指针赋值NULL。 写代码的时候,不要写出p->next->next这种东西,因为如果p->next==NULL,那程序运行就报错了。 用指针的时候,一定要判其是否为NU…
暂无图片
编程学习 ·

腾讯招聘信息 爬取案例

前段时间看了了scrapy,有一个案例是爬取腾讯招聘信息的,当时看了腾讯网站,已经更新换代了,于是自己看了看,写下一个实际可行的demo 首先是观察腾讯招聘首页不在页面element内,但是依旧很容易就可以发现你要的信息观察url,可以提取出 https://careers.tencent.com/tencen…
暂无图片
编程学习 ·

程序员和产品经理之间的恩怨情仇,低代码开发可让他们和谐共处?

大家还得那个程序员因为奇葩需求而和产品经理大打出手的事件?产品经理认为我是根据用户需求规划产品功能的,觉得怎么实现是你们程序员自己的事情。双方在争论的时候,矛盾不断加剧打了起来。当时的视频火爆了网络,本是同根生,相煎何太急啊。然而除了上面因产品需求而发生矛…
暂无图片
编程学习 ·

Java中的JDBC编程

Java中的JDBC编程JDBC的工作原理JDBC的使用JDBC常用接口和类数据库连接ConnectionStatement对象ResultSet对象 JDBC的工作原理JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API有java.sql.* ,javax…
暂无图片
编程学习 ·

mssql server数据库日志清理

ERP的数据库运行一段时间后会增加的很大,主要是数据库的日志文件增大较多,以金蝶K3为例,可以执行以下语句清理数据库的日志文件。 USE [master] GO ALTER DATABASE AIS20141013114943 SET RECOVERY SIMPLE WITH NO_WAIT ---database后为数据库名 GO ALTER DATABASE AIS20141…