第一个 servlet 程序
- 第一个 servlet 程序
- 1. 创建项目
- 创建好后的 默认目录 解析
- 2. 引入依赖
- 为什么要引入依赖?
- 3. 创建目录结构
- 1、在 main 目录下创建一个 webapp 目录
- 2、在 webapp 下创建一个 WEB-INF 目录
- 3、在 WEB-INF 目录下创建一个 web.xml 文件
- 4、web.xml 需要配置
- 4. 代码编写
- 5. 打包程序
- 为什么要打包
- 1、点击右侧的 maven ,打开面板
- 2、选中此时的 Lifecyle 下的 package
- 3、成功之后就会显示 build success
- 4、修改 jar 包 为 war 包
- 5、右键打开 war 包
- 6. 部署
- 7 验证
第一个 servlet 程序
写一个hello的html页面,将页面部署到服务器,通过浏览器访问页面,这个过程是怎么实现的?
首先,我们使用的是tomcat服务器
这个服务器下载到本地硬盘,硬盘容量,就作为服务器容量
然后回答上述问题,怎么实现的呢?是通过servlet程序,把浏览器发送出来的请求 读取 然后 通过读取的信息 访问服务器,实现出来
那么 如何实现 servlet 程序
1. 创建项目
创建好后的 默认目录 解析
main 底下存放的是 业务代码,java 目录底下存放的是 java 代码。
resources 里存放的是程序依赖的文件,此处再是不涉及。
test 目录下的 java 存放的是 测试代码
pom.xml 是 maven 项目的配置文件,后面会经常用到
2. 引入依赖
为什么要引入依赖?
因为servlet是要依赖 tomcat 才能运行
但是 我们在 maven中 使用 servlet 所以 我们需要 引入 tamcat 但是呢 我们之前已经把 tomcat 下载到 本地硬盘了,所以 我们只需要 去官网 找到tomcat 提供的 依赖的代码,也就是 其他程序中 ,写入 tomcat 提供的依赖的 代码,就能 使用tomcat了
那么 在 maven中 也就是用 pom.xml 配置了
搜索 https://mvnrepository.com/ 打开 maven 仓库。
搜索 servlet 选择当前的圈出的。
点击进去,选择 3.1.0 版本
选中当前的 maven,将上述的代码复制到 pom.xml 里,要复制到 dependencies 标签里。
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
如果复制后 是 红色字体,表示还没下载完
3. 创建目录结构
虽然 maven 已经帮我们自动的创建了一些目录,但是还是不够。
此处需要使用 maven 开发一个 web 程序,还需要别的目录。
1、在 main 目录下创建一个 webapp 目录
选择 Directory,创建 webapp 目录。
2、在 webapp 下创建一个 WEB-INF 目录
选择 Directory,创建 WEB-INF 目录。
3、在 WEB-INF 目录下创建一个 web.xml 文件
选择 File 创建文件。
4、web.xml 需要配置
<!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>
直接将上面的这段代码复制到 web.xml 文件中。
圈出的部分可能会是红色的,但是不一定是错误的,可以使用 alt + enter 使使。
webapp 目录就是未来部署到 Tomcat 中的一个重要的目录.当前我们可以往 webapp 中放一些静态资源,比如 html,css 等.
在这个目录中还有一个重要的文件 web.xml. Tomcat 找到这个文件才能正确处理 webapp 中的动态资源
4. 代码编写
创建一个 HelloServlet 类。
HttpServlet 是 servlet api 里提供的现成的类,一般写 servlet 代码一般都是继承 HttpServlet
这个类需要重写 doGet 方法,如果是一个 Post 请求,那就是重写一个 doPost 请求。
public class HelloWorld extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//super.doGet(req, resp);
}
}
@Override 表示的是方法重写,
HttpServletRequest request 这个参数表示一个 http 请求。
HttpServletResponse response 这个参数表示一个 http 响应。
doGet 方法的效果就是 根据请求计算响应, Tomcat 收到 get 请求就会触发 doGet 方法,Tomcat 就会构造好两个参数,
一个是 rep一个是 resp。
rep 是 TCP socket 中读出来的字符串,按照 http 协议解析得到的对象。
resp 则只是一个 空的对象。
super.doGet(req, resp); 这儿条语句一定要注释掉。
编写业务代码,也就是我们的 hello world 。
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")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//super.doGet(req, resp);
System.out.println("Hello World"); // 这是控制台打印
// 返回到客户端的打印
// getWriter 会得到一个 Writer 对象
resp.getWriter().write("Hello World");
}
}
需要注意的是,doGet 是 Tomcat 收到 GET 请求的时候就会调用。
具体要不要调用 doGet,还要看当前的 GET 请求的路径是什么,不同的路径可以触发不同的代码。
(关联到不同的类上)
一个 Servlet 程序中,可以有很多的 Servlet 类,每个 Servlet 都可以关联到不同的路径,也就是对应到不同的资源,因此多个 Servlet 就实现了不同的功能,但是一个 Servlet 类是不可以对应多个路径的。对应的,一个路径也不能对应多个 Servlet,路径 和 Servlet 类之间是一对一之间的关系。
5. 打包程序
为什么要打包
程序编译好之后,会得到一些.class 文件,此时要把这文件打成 war 包。
war 是 tomcat 专属的用来描述 webapp 的程序,一个 war 就是一个 webapp。
1、点击右侧的 maven ,打开面板
2、选中此时的 Lifecyle 下的 package
可以直接双击运行。
也可以右键选中上面的 Run 运行。
打完之后再左侧的 target 目录里就包含了 所打的包,默认情况下打的是一个 jar 包
3、成功之后就会显示 build success
4、修改 jar 包 为 war 包
先在 pom.xml 文件中的 project 标签里加入一个 packaging 标签。
在这标签里写下指定的包是哪一种,我们打的是 war 包,此处就写的是 war 包。
<packaging>war</packaging>
还需要有一个 build 标签,在 这个 build 标签里也要有一个 finalName 标签。
此处的 finalName 标签里写的就是包的名字。
<build>
<finalName>test01</finalName>
</build>
再次打包
发现
5、右键打开 war 包
6. 部署
部署就是将之前的 war 文件 拷贝到 tomcat 的 webapps 目录即可,无论 tomcat 是不是在你的同一个电脑上,都是如此拷贝。
拷贝后,启动 tomcat。
如果 tomcat 正在运行,直接拷贝的时候 tomcat 也可以识别,但是在 windows 中可能存在 bug,
实际工作中,tomcat 基本都是在 linux 上运行的。
之后启动 tomcat 。
7 验证
打开地址栏,输入 url ,测试写好的代码。
127.0.0.1:8080 服务器的ip 也就是部署在自己本机上的tomcat服务器IP
20230507 是 第一级目路径,也叫做 context path / application path,这个目录就代表了一个 webapp,也就是一个网站。
/hello 是 第二级路径 也叫做 servlet path,如果这两个路径有一个出现了错误,就会出现 404
第一级路径对应的是 war 包名,第二级路径对应的是 注解 里的内容。
可以看到在服务器和客户端都打印出了 Hello World。