目录
第一次接触 Servlet,使用 Servlet 编写代码并配合 Tomcat 在浏览器中展示代码效果,也算是自己这么长时间学习java的一次飞升吧。
本文总结了六步使用 Servlet 编写 helloworld步骤,希望给初学Servlet的同学一些帮助。
0、准备工作
1)了解并安装 Tomcat
在编写代码之前,大家需要安装 Tomcat !!
如果没有安装的haute,可以参考该文章进行安装:Tomcat 安装和简单介绍
2)maven 介绍
maven 是一个构建工具,也就是 build (编译、打包、部署...)。
我们在编写Servlet项目时,会遇到一些复杂的程序,编译和打包起来特别麻烦。比如 A 依赖 B,B 依赖 C,此时如果想要编译运行A,就必须先编译运行 B,要想编译运行 B,就必须先编译运行 C。
而 maven 就是为了解决这个问题的,使我们在开发比较复杂的项目的时候,也可以比较方便的进行一些列操作(编译、打包、管理依赖...)。
1、创建项目
首先创建一个maven项目
此处我的 idea 版本是 2022版的
项目创建好之后的目录结构如下
src : 用来存放源代码
- main :业务代码
- resources : 存放代码中需要依赖的资源
- test: 测试代码
- pom.xml : 项目中的全局配置文件(写了很多与项目相关的配置属性)
2、引入Servlet依赖
Servlet 并不是 Java 标准库自带的,要想使用,我们就需要额外的下载安装,并引入项目中!
此时就要借助 maven ,把我们使用的库里依赖的东西,自动从中央仓库上,下载下来
①在中央仓库 https://mvnrepository.com/ 中,搜索 Servlet,结果中第一个就是我们需要下载的
② 根据 Tomcat 选择相对应的版本,这里我选择的是 3.1-0版本
Servlet 3.1.0 和 Tomcat 8.5 和 jdk 8 是配套的
③ 选择 maven,把maven里的xml 复制到 pom.xml 中
<!-- 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>标签,然后把上述xml 复制进去
<dependencies> 标签内部放置项目依赖的 jar 包 . maven 会自动下载依赖到本地此处如果大家网络不好,复制进去的代码就可能报红,大家可以点击右侧maven,然后点击刷新等待即可![]()
3、创建目录结构
虽然 maven 已经给我们创建出一些目录了,但是还不够,我们需要再创建一个符合 Tomcat 要求的目录结构。
① 在 main 目录下,创建 webapp 目录
② 在新建的 webapp 目录下,创建WEB-INF 目录
③ 在新建的 WEB-INF 目录下,创建 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>
如果报以下错误
URI is not registered (Settings | Languages & Frameworks | Schemas and DTDs)
按 Ctrl + Alt + s,把链接添加进去就行了。
4、编写代码
我们需要写的代码,需要放在 java 目录,比如创建一个类 HelloServlet
第一步:把创建的 HelloServlet 类继承 HttpServlet
第二步:实现父类 doGet方法,并把super方法删除!!
第三步:打印 helloword
@WebServlet("/helloworld")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 在Tomcat日志中打印helloworld
System.out.println("helloword");
// 给客户端返回helloworld 也就是在客户端页面打印helloworld
resp.getWriter().write("helloworld");
}
}
@WebServlet("/helloworld"):
- 此处写下的 "/helloworld" 意思是 GET请求并且 URL 里面路径是 /helloworld 的请求,才会生效,才会调用这个 doGet 方法。
- 也就是说给不同的路径,关联上不同的类!!!
- "/helloworld" 是一个虚拟的资源,硬盘上并没有这个 "/helloworld" 文件
doGet: 表示当前 Tomcat 在收到某些 GET 请求的时候,会调用该方法
- 作用:根据请求,计算响应
- 参数:
- req : 请求(浏览器给Tomcat发的数据)
- resp : 响应(Tomcat给浏览器发回的数据)
5、打包程序
当前写的 Servlet 代码,是没有main方法的,也就是所运行不起来。所以我们要在该 Servlet 代码打包方法 Tomcat 程序中,才能运行。
使用 maven 打包,默认会生成一个jar 包,而我们需要的 war 包,所以我们就要修改配置文件,在pom.xml 中project 标签中下加下面一段代码即可。
<packaging>war</packaging>
<build>
<finalName>Servlet</finalName>
</build>
finalName标签中的是war包的名字,可以自定义
然后使用 maven 进行打包。打开 maven 窗口 (一般在 IDEA 右侧就可以看到 Maven 窗口, 如果看不到的话,可以通过 菜单 -> View -> Tool Window -> Maven 打开)
打包成功的话,底部会出现一个success 文字 。
此时就可以在右侧target目录中看见我们打包的war包了
6、部署程序
我们把 war 包拷贝到 Tomcat 的 webapps 目录下。
启动 Tomcat,Tomcat 就会自动把 war 包解压缩。
7、验证程序
![](https://i-blog.csdnimg.cn/blog_migrate/eda9f36f492825ecbd8cf181f074f979.png)
终端中,Tomcat 也会打印日志 helloworld
注意:URL 中的PATH分成两个部分,其中 Servlet 为 Context Path,helloworld 为 Servlet Path
在浏览器中输入URL求取转换步骤如下:
![](https://i-blog.csdnimg.cn/blog_migrate/eb3ff3dc580b65cddc6b1210b6c5ee7f.png)
8、使用 smart Tomcat 插件部署
在实际开发中,如果我们需要调试该代码,每修改代码一次,我们就要重复打包部署,这样就给浪费大量时间。所以为了简化该部署操作,我们可以使用 smart Tomcat 插件来简化我们部署的过程!
① 安装 Smart Tomcat 插件
② 配置 smart Tomcat
点击 Add Configure -> 点击右上角 + -> 点击smart Tomcat
这里配置上smart Tomcat 信息
NAME :给该配置起名,可以随便写
Context Path :浏览器 url 访问时候的第一级路径,标识 webapp 的。
Tomcat server:把Tomcat本地下载地址传入
③ 运行smart Tomcat
配置完后点击右上绿色的三角符号运行
注意:
- smart Tomcat 运行日志是红色的,大家不要看见红字就认为是报错!!
- 当看见 start Server startup in ??? ms 时就说明运行成功
- Tomcat 和 smart Tomcat 都绑定 8080端口,所以运行 smart Tomcat 要先把 Tomcat 关闭,否则会运行失败!!
④ 访问页面
在浏览器访问 http://127.0.0.1:8080/hello/helloworld 就会出现以下页面
注意路径的对应关系: