目录
1.创建项目
2.引入依赖
①直接粘贴仓库目标地址代码
② 下载jar包, 然后导入jar包
3.创建目录
4.编写代码
5.打包代码
6. 部署程序
①使用IDEA打成war包
②更方便的部署方式
7.验证程序
1.创建项目
使用IDEA创建一个maven项目
2.引入依赖
引入依赖的方式两种
①直接粘贴仓库目标地址代码
Maven项目创建完毕之后, 会自动生成一个pom.xml文件, 我们需要在pom.xml中引入Servlet API依赖的jar包.
1.在中央仓库中
https://mvnrepository.com/https://mvnrepository.com/搜索servlet:
选择合适的版本
这里以3.1.0为例子
版本是如何匹配的如上图,
下方有个依赖自动下载的代码
打开pom.xml文件, 把上述代码粘贴到其中, 但是需要粘贴到dependencies标签中:
<dependencies> 标签内部放置项目依赖的 jar 包. maven 会自动下载依赖到本地.
② 下载jar包, 然后导入jar包
下载jar包
然后在Maven项目里面创建一个文件夹, 将此jar包直接拖到这个文件夹里面:
将创建的用来存放jar包的文件夹设置为 library:
然后就可以使用这个jar包了
3.创建目录
maven项目创建好之后, IDEA会帮我们自动创建出一些目录. 形如:
这些目录中:
- src : 表示源代码所在的目录
- main / java 表示源代码的根目录, 后续创建.java文件就是放在这个目录
- main / resources 表示项目的一些资源文件所在的目录
- test / java 表示测试代码的根目录
这些目录远远不够, 我们还需要创建一些新的目录/文件
①创建webapp 目录
②创建web.xml
然后在webapp目录内创建一个WEB-INF目录, 并创建一个web.xml文件:
③编写web.xml
往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>
webapp 目录就是未来部署到Tomcat中一个重要的目录, 当前我们可以往webapp中放一些静态资源, 比如html, css等.
在这个目录中还有一个重要的文件web.xml. tomcat找到这个文件才能正确处理webapp中的动态资源.
4.编写代码
在src / java目录中创建一个类HelloServlet , 然后让子类继承HttpServlet:
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 {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("hello");
resp.getWriter().write("hello");
}
}
- 创建的HelloServlet类, 继承了依赖中的HttpServlet类
- 这个主类需要加上 @WebServlet("hello") 的注解, 表示 tomcat请求的路径为 /hello的请求才能调用HelloServlet这个类里面的代码
- 重写doGet方法, doget有两个参数, 一个是req, 表示请求, 一个是 resp, 表示响应. 这个方法会在tomcat收到get请求时触发
- req和resp两个参数, 是把一个http请求, 抽象为一个类, 然后类里面包含了一个http请求的字段信息
- HttpServletRequest 表示http请求, tomcat会按照http请求的格式, 把字符串格式的http请求转化为一个HttpServletRequest对象, 后续想要获取请求中的信息, 方法, url, header, body等, 都是通过这个对象来获取
- HttpServletResponse 表示Http响应, 代码中把响应对象构造好(状态码, header,body等)
- resp.getWriter() 会获取一个流对象, 通过这个流对象就可以写入一些数据, 写入的数据就会被构造成一个HTTP响应的body部分, Tomcat会把种鸽响应转成字符串, 通过socket歇会给浏览器.
这几行代码只有寥寥几行, 但是包含的信息量巨大.
1.我们的代码不是通过main方法作为入口, main方法已经包含在tomcat中了, 我们写的代码会被tomcat在核实的机会调用起来
2. 我们随便写个类都会都能被tomcat调用吗, 满足什么条件才能被调用?
①创建的类需要继承HttpServlet
②这个类需要创建一个注解, @WebServlet, 然后关联上一个HTTP路径
③需要实现doXxx方法
④还需要合适的时机
5.打包代码
使用 maven 进行打包. 打开 maven 窗口 (一般在 IDEA 右侧就可以看到 Maven 窗口, 如果看不到的话,可以通过 菜单 -> View -> Tool Window -> Maven 打开). 然后展开 Lifecycle , 双击 package 即可进行打包
双击package
如果比较顺利的话, 能够看到 SUCCESS 这样的字样:
如果代码/配置/环境存在问题, 可能会提示 BUILD FAILED, 可以根据具体提示的错误信息具体解决.
打包成功后, 可以看到在 target 目录下, 生成了一个 jar 包
生成了一个名为Test2-1.0-SNAPSHOT的jar包.
但是jar包并不是我们需要的, tomcat需要识别的是war包格式, 此外这个jar名字太复杂了我们需要换个名字, 换一个更简单的
war包和jar包的区别:
jar包是普通的java程序打包的结果, 里面会包含一些.class文件
war包是java web程序, 里面除了会包含一些.class文件之外, 还会包含html, css和js,图片等, 以及其他的jar包, 打成war包格式, 才能被tomcat识别
Test2-1.0-SNAPSHOT.jar 这个包名字的由来:
在 pom.xml 中新增一个 packing 标签, 表示打包的方式是打一个 war 包<packaging>war</packaging>
修改打包的名称:
在 pom.xml 中再新增一个 build 标签, 内置一个 finalName 标签, 表示打出的 war 包的名字是
HelloServlet
<build>
<finalName>HelloServlet</finalName>
</build>
然后重新点击maven菜单里面的package
进行打包:
6. 部署程序
①使用IDEA打成war包
把war包拷贝到tomcat/webapps里面, 如下:
然后启动tomcat, tomcat就会自动把war包解压:
②更方便的部署方式
手动拷贝 war 包到 Tomcat 的过程比较麻烦. 我们还有更方便的办法
此处我们使用 IDEA 中的 Smart Tomcat 插件完成这个工作
打开setting
选中plugins
然后点击MarketPlace并搜索Smart tomcat, 然后安装并应用:
插件就是对程序的一些特定场景, 做出一些特定的功能的扩展.
重启IDEA
配置smart tomcat:
添加tomcat:
添加tomcat版本
选中下载tomcat的目录
设置Context path:
设置端口号:
其中 Context Path 默认填写的值是项目名称
ok之后右上角就变成了:
点击绿色的三角号, IDEA 就会自动进行编译, 部署, 启动 Tomcat 的过程
使用 Smart Tomcat 部署的时候, 我们发现 Tomcat 的 webapps 内部并没有被拷贝一个 war 包,也没有看到解压缩的内容.Smart Tomcat 相当于是在 Tomcat 启动的时候直接引用了项目中的 webapp 和 target 目录
所以不需要进行解压缩
7.验证程序
使用浏览器访问: http://127.0.0.1:8080/HelloServlet/hello
注意: URL中的path分为两部分, 其中HelloServlet为Context Path, hello 为Servlet path
此次内容结束: