Servlet与Tomcat运行示例
Servlet与Tomcat运行示例
本文将写一个servlet,然后将其部署到Tomcat的全过程。本文参考《深入拆解Tomcat_Jetty》内容。
一、基于web.xml开发步骤
- 下载、安装 Tomcat。
 - 编写一个继承 HTTPServlet 的 Java 类MyServlet。
 - 将 Java 类文件编译成 Class 文件。
 - 建立 Web 应用的目录结构,并配置 web.xml。
 - 部署 Web 应用。
 - 启动 Tomcat。
 - 浏览器访问验证结果。
 - 查看 Tomcat 日志。
 
1 下载、安装Tomcat
去Tomcat官网(https://tomcat.apache.org/download-90.cgi) 下载最新的Tomcat(需下载对应系统版本,请根据实际情况选择,本文以MacOS系统为例)。下载完成之后解压即可。

2 编写MyServlet类
编写一个MyServlet类,其继承HttpServlet类,并复写其doGet()和doPost()方法。
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
 * @Version V1.0
 * @Description: MyServlet 类
 */
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("MyServlet 在处理 get()请求...");
        PrintWriter out = resp.getWriter();
        resp.setContentType("text/html;charset=utf-8");
        out.println("<strong>doGet My Servlet!</strong><br>");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("MyServlet 在处理 post()请求...");
        PrintWriter out = resp.getWriter();
        resp.setContentType("text/html;charset=utf-8");
        out.println("<strong>doPost My Servlet!</strong><br>");
    }
}
3 编译MyServlet
因为这里我们不采用IDE的方式,所以在编译MyServlet.java类时,我们使用javac的命令。但是我们需要注意,因为我们在MyServlet类中继承了HttpServlet,而HttpServlet并不是jdk自带的class,所以需要带上HttpServlet所在的jar包一起进行打包!不然会出现以下错误信息:

我们先将Tomcat解压目录 lib/下的servlet-api.jar拷贝到MyServlet.java同级目录,然后执行以下命令,即可将MyServlet进行编译:
javac -cp ./servlet-api.jar MyServlet.java

4 建立 Web 应用目录
创建文件夹,也就是项目工程 MyWebApp, 其目录主要如下:
MyWebApp/WEB-INF/web.xml
MyWebApp/WEB-INF/classes/MyServlet.class
其中,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_4_0.xsd"
  version="4.0"
  metadata-complete="true">
    <description> Servlet Example. </description>
    <display-name> MyServlet Example </display-name>
    <request-character-encoding>UTF-8</request-character-encoding>
    <servlet>
      <servlet-name>myServlet</servlet-name>
      <servlet-class>MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
      <servlet-name>myServlet</servlet-name>
      <url-pattern>/myservlet</url-pattern>
    </servlet-mapping>
</web-app>
5 部署 MyWebApp 应用
将这个目录 MyWebApp 拷贝到 Tomcat 的安装目录下的 webapps 目录:

6 启动 Tomcat
找到 Tomcat 安装目录下的 bin 目录,如果是 Windows 系统,执行 startup.bat;如果是 Linux 系统,则执行 startup.sh

7 浏览器访问
在浏览器里访问这个 URL: http://localhost:8080/MyWebApp/myservlet

同样,post方式调用也会得到相类似的结果!
8 查看 Tomcat 日志
我们可以看下tomcat/logs下的catalina.out文件,使用以下命令查看相应的日志:
tail -100f catalina.out

二、基于注解@WebServlet开发
步骤基本上同上述基于web.xml一致,有以下几点不同之处!
1 不同之处1: MyServlet类的代码
在MyServlet上添加@WebServlet代码,具体如下:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
 * @Version V1.0
 * @Description: MyServlet 类
 */
@WebServlet("/myAnnotationServlet")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("MyServlet 在处理 get()请求...");
        PrintWriter out = resp.getWriter();
        resp.setContentType("text/html;charset=utf-8");
        out.println("<strong>doGet My Servlet!</strong><br>");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("MyServlet 在处理 post()请求...");
        PrintWriter out = resp.getWriter();
        resp.setContentType("text/html;charset=utf-8");
        out.println("<strong>doPost My Servlet!</strong><br>");
    }
}
2 不同之处2: 去除web.xml配置
MyWebApp项目下不需要再配置web.xml,因为在注解中已经对其进行了相关的配置。
3 不同之处3: 访问地址变化
因为在@WebServlet中配置了的路径为/myAnnotationServlet,故而此处访问路径应为:
http://localhost:8080/MyWebApp/myAnnotationServlet
剩下步骤与基于web.xml配置基本一致,不再细述!后期将就本案例讲解分析Tomcat是如何加载并运行此Servlet的!
微信公众号: 源码湾
欢迎关注本人微信公众号: 源码湾。 本公众号将不定期进行相关源码及相关开发技术的分享,共同成长,共同进步~

Blog:
- 简书: https://www.jianshu.com/u/91378a397ffe
 - csdn: https://blog.csdn.net/ZhiyouWu
 - 开源中国: https://my.oschina.net/u/3204088
 - 掘金: https://juejin.im/user/5b5979efe51d451949094265
 - 博客园: https://www.cnblogs.com/zhiyouwu/
 - 微信公众号: 源码湾
 - 微信: WZY1782357529 (欢迎沟通交流)
 
Servlet与Tomcat运行示例的更多相关文章
- Tomcat运行错误示例三
		
Tomcat运行错误示例三 最近碰到tomcat启动的问题,如图: 以前也碰见过这种情况,这次写的时候忘记加return,所以跳出了错误,加上之后的效果,如图: 参考网址 参考网址
 - Tomcat运行错误示例二
		
Tomcat运行错误示例二 当遇到这种错误时,一般是构建路径的问题,按步骤来就好.如图: 点击---->库---->Add Library---->下一步---->选择tomc ...
 - Tomcat运行错误示例
		
tomcat运行错误示例 当出现这种错误时,如果是自己配置的tomcat,需要找/conf/server.xml文件. 如果是使用的eclipse tomcat 插件,需要在你的工作空间 找到 如下文 ...
 - Servlet与Tomcat
		
Web应用不仅局限于展示在服务器上的静态页面,更多的是根据用的请求动态的生成页面信息,还可以从数据库中提取数据,生成页面返回给用户. 第一种方法:遵循HTTP协议实现一个服务器端软件 第二种方法:利用 ...
 - SpringBoot webmvc项目导出war包并在外部tomcat运行产生的诸多问题以及解决方案
		
背景: 有需求要将原来的Spring(3.2.6) + Springmvc + Hibernate项目重构为Springboot(1.5.2)项目 描述: 记录重构过程,以及期间遇到的种种问题和对应的 ...
 - Servlet(1)—Servlet容器tomcat和HTTP协议
		
Servlet容器为JavaWeb应用提供运行时环境,它负责管理Servlet和JSP的生命周期,以及管理他们的共享数据. Servlet容器也称JavaWeb应用容器,或者Servlet/JSP容器 ...
 - 对于Servlet、Servlet容器以及一个Servlet容器-Tomcat
		
Servlet.Servlet容器等内容讲解 转载自http://blog.csdn.net/iAm333 对于Servlet.Servlet容器以及一个Servlet容器-Tomcat这些概念讲解的 ...
 - 使用eclipse为Servlet在Tomcat中的部署方法
		
一:下载安装jdk,tomcat,eclipse: 使用eclipse建立动态web项目lcj,更改编译文件目录,方法如下: 右键点击→工程名称→属性(Properties)或(Building Pa ...
 - eclipse 使用tomcat运行JavaWeb项目,文件修改后为何不用重启tomcat? (运行web项目的4种方式)探究
		
1.情景说明 在eclipse中,为什么Java文件修改后,重启tomcat class文件才能生效? 为什么jsp修改后,不需重启tomcat就能立即生效? 为什么静 ...
 
随机推荐
- 2019年7-8月Leetcode每日训练日志
			
2019-08-29 #274 H指数 2019-08-28 #287 寻找重复数 #875 爱吃香蕉的珂珂 #704 二分查找 2019-08-27 #744 寻找比目标字母大的最小字母 #225 ...
 - SpringBoot_@valid_参数校验
			
SpringBoot @valid 参数校验 空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @NotBlank 检查约束字符串是不 ...
 - CentOS7安装mysql8.0.12
			
一.配置yum源 下载mysql源安装包 在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/ 复制下载链接:https://d ...
 - VS Code 配置 Python 开发环境
			
1.终端运行 Python2.安装 Python 插件3.查看.安装外部库4.代码补全工具5.代码检查工具5.1.pylint5.2.flake8 和 yapf 本文基于 VS Code 1.36.1 ...
 - HDU - 5128The E-pang Palace+暴力枚举,计算几何
			
第一次写计算几何,ac,感动. 不过感觉自己的代码还可以美化一下. 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5128 题意: 在一个坐标系中,有n个 ...
 - 性能测试:通过设置注册表提高 P2P/IIS 并发数
			
写在前面 在执行性能测试(如用 JMeter 直接压接口)的时候,有的时候并发数上不去.本机大面积出现 TCP 状态为 TIME_WAIT,除了放开 TCP 端口数和调整默认 TCP 释放时间外,另外 ...
 - python数据结构——线性表
			
线性表 线性表可以看作是一种线性结构(可以分为顺序线性结构,离散线性结构) 1. 线性表的种类: 顺序表 元素存储在一大块连续存储的地址中,首元素存入存储区的起始位置,其余元素顺序存放. (元素之间的 ...
 - SpringBoot初体验之整合SpringMVC
			
作为开发人员,大家都知道,SpringBoot是基于Spring4.0设计的,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程.另外Spr ...
 - Http和Https相关问题
			
Http和Https Http(默认端口号80) 超文本传输协议(Http,HyperText Transfer Protocol)是互联网上使用最为广泛的一种网络协议(应用层).设计Http最初的目 ...
 - FreeSql (二十一)查询返回数据
			
FreeSql 采用 ExpressionTree 优化读取速读,如果懂技术的你一定知道 .NETCore 技术下除了原生代码,最快就是 Emit 和 ExpressionTree. 项目在初期使用的 ...