Servlet 是什么
第一个 Servlet 程序
1. 创建项目
2. 引入依赖
![](https://img-blog.csdnimg.cn/direct/62cb38487b6f40739ff7b64091bcd699.png)
b)选择版本. 此处我使用 3.1.0 版本,为了和 tomcat8 对应
c)把中央仓库中提供的 xml 复制到项目的 pom.xml 中
创建一个<dependencies>标签然后把复制的内容放进去即可。首次创建的时候下方会有一个进度条,等它下载完就行了。
3. 创建目录
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
注意:这里的 servlet 程序和之前写的代码最大的不同就是 没有main方法。如果把 main 方法比作是汽车的发动机的话,servlet 程序这里就相当于火车车厢,每节车厢是没有发动机的,只有前面的车头(tomcat)有,当把写好的 servlet 程序放到 webapps 目录下,此时就相当于把车厢都挂到车头后了,tomcat 会根据目录里面的 WEB-INF/web.xml 来识别这里的车厢是需要拉着走的。
4. 编写代码
import javax.jws.WebService;
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;
// 此处的这个注解类似于“导购员”,根据需求(路径)不同指引去对应的地方
@WebServlet("/hello")
//创建一个类 HelloServlet , 继承自 HttpServlet
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 这个代码一定要干掉. 父类里的这个方法只是返回了一个405错误页面
// super.doGet(req, resp);
// 这个只是在服务器的控制台里打印.
System.out.println("hello world");
// 要想把 hello world 返回到客户端, 就需要使用下面的代码.
// getWriter 会得到一个 Writer 对象.
resp.getWriter().write("hello world");
}
}
5. 打包程序
最后:在 target 这里有个 war 包就表示成功了
![](https://img-blog.csdnimg.cn/direct/01a4c28c351645f5b46d0dce73a6dfc1.png)
6. 部署程序
把打包好的 war 包拷贝到 tomcat 的 webapps 中即可。无论 tomcat 和 war 包是否在同一个电脑都是这样拷贝。然后启动 tomcat。
7. 验证程序
打开浏览器的地址栏,输入 url 查看结果
小结
当在浏览器地址栏中输入 url 之后,浏览器就构造了一个对应的 http get 请求,发给 tomcat,此时 tomcat 就会根据第一级路径确定了具体的 webapp、再根据第二级路径确定了调用哪个类、最后再通过 get / post 方法来确定调用 HelloServlet 的哪个方法(doGet、doPost......)。
简化后的部署方式
上面的第5、6个步骤是可以简化的,需要在 idea 上下载一个插件。
按照上面的步骤进行之后就大功告成了。这个方式是基于 tomcat 插件自动打包部署的,smart tomcat 并不会把 war 包拷贝(webapps 目录里是不会变的),而是在启动的时候指定了一个特定的 webapp 目录,相当于让 tomcat 加载这单个 webapp 来运行。
idea 直接调用 tomcat,让 tomcat 加载当前项目中的目录,这个过程没有涉及到打 war 包,也没有拷贝,也没有解压缩的过程。因此,webapps 里面一些内容(比如欢迎页面)就没有了。