本文将写一个servlet,而后将其部署到Tomcat的全过程。本文参考《深刻拆解Tomcat_Jetty》内容。html
去Tomcat官网(https://tomcat.apache.org/download-90.cgi) 下载最新的Tomcat(需下载对应系统版本,请根据实际状况选择,本文以MacOS系统为例)。下载完成以后解压便可。java
编写一个MyServlet类,其继承HttpServlet类,并复写其doGet()和doPost()方法。web
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>");
}
}
复制代码
由于这里咱们不采用IDE的方式,因此在编译MyServlet.java类时,咱们使用javac的命令。可是咱们须要注意,由于咱们在MyServlet类中继承了HttpServlet,而HttpServlet并非jdk自带的class,因此须要带上HttpServlet所在的jar包一块儿进行打包!否则会出现如下错误信息:apache
咱们先将Tomcat解压目录 lib/下的servlet-api.jar拷贝到MyServlet.java同级目录,而后执行如下命令,便可将MyServlet进行编译:api
javac -cp ./servlet-api.jar MyServlet.java复制代码
建立文件夹,也就是项目工程 MyWebApp, 其目录主要以下:浏览器
MyWebApp/WEB-INF/web.xml
MyWebApp/WEB-INF/classes/MyServlet.class复制代码
其中,web.xml的内容以下:tomcat
<?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>复制代码
将这个目录 MyWebApp 拷贝到 Tomcat 的安装目录下的 webapps 目录:微信
找到 Tomcat 安装目录下的 bin 目录,若是是 Windows 系统,执行 startup.bat;若是是 Linux 系统,则执行 startup.shapp
在浏览器里访问这个 URL: http://localhost:8080/MyWebApp/myservlet
webapp
一样,post方式调用也会获得相相似的结果!
咱们能够看下tomcat/logs下的catalina.out文件,使用如下命令查看相应的日志:
tail -100f catalina.out复制代码
步骤基本上同上述基于web.xml一致,有如下几点不一样之处!
在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>");
}
}
复制代码
MyWebApp项目下不须要再配置web.xml,由于在注解中已经对其进行了相关的配置。
由于在@WebServlet中配置了的路径为/myAnnotationServlet,故而此处访问路径应为:http://localhost:8080/MyWebApp/myAnnotationServlet
剩下步骤与基于web.xml配置基本一致,再也不细述!后期将就本案例讲解分析Tomcat是如何加载并运行此Servlet的!
欢迎关注本人微信公众号: 源码湾。 本公众号将不按期进行相关源码及相关开发技术的分享,共同成长,共同进步~