目录
第一个Servlet程序
创建项目
引入依赖
第一步,创建项目(Maven)
第二步,引入依赖(Servlet依赖)
创建Maven项目,和引入Servlet依赖 请参考下面的博客,本文不再复述
创建目录
第三步,创建目录
首先 要创建目录配置 web.xml 文件
单击main选中,然后右键创建webapp目录(webapp目录与蓝色的Java目录同级)
然后再创建WEB-INF目录,然后再创建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>
编写Servlet代码
第四步,编写Servlet代码
在java文件里创建HelloServlet类
使HelloServlet继承自HttpServlet类 (由Servlet API提供, 写Servlet代码一般都要继承这个类)
然后重写 doGet 方法,super.doGet这行代码得删掉
然后引用resp对象的getWriter()方法的 write()方法,括号内输入字符串 “hello world”
然后再写上注解 @WebServlet("/hello")
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); 注释掉这行代码,不然页面会404
resp.getWriter().write("hello world!!");
}
}
打包代码
第五步,打包代码
此时我们的程序是不能直接独立运行的,而是必须放到Tomcat上运行(部署)
而部署的前提,是先打包 我们写的代码
对于一个规模比较大的项目,里面会包含很多 .java文件,进一步就会产生很多.class文件,因此,将这些.class文件都打包成一个压缩包再继续拷贝,比较科学。
再Java中常用的压缩包为 jar , war 。
war 跟 jar本质上没有区别,都是打包一堆 .class文件,但是 war 包是属于Tomcat的专属格式,里面会有一些特定的目录结构和文件,比如web.xml 等等,后续 tomcat 就要识别这些内容来加载webapp,因此,我们使用的是 war 包。
在idea里 点击Maven 双击package 即可进行打包
出现 build success 就是打包成功了
打包操作,做的事情:
1.检查代码中是否存在一些依赖,依赖是否下载好了
2.对代码进行编译,生成.class文件
3.把这些.class文件以及web.xml按照一定的格式进行打包
发现现在生成的是jar包,在pom.xml文件添加<packaging>war</packaging>,在刷新maven重新打包即可
如果jdk版本不是1.8,而是更高的版本,比如像我一样是jdk18,则需要添加maven打war包的插件
<packaging>war</packaging>
<build>
<!--给压缩包命名-->
<finalName>hello_servlet</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
</plugin>
</plugins>
</build>
然后再次刷新maven,再次打包即可
项目部署
第六步,项目部署
把打包好的war包,拷贝到tomcat的webapps目录中,在重新启动tomcat
tomcat启动成功后,war包也已经被解压缩了
此时就算部署成功了
验证程序
第七步,验证程序
不是tomcat一启动,doGet的就能执行
我们写的代码是doGet,意思是遇到了Get请求,我们的代码才能够执行
但也不是任意GET请求都可以,URL也要能匹配才行
注意看浏览器的URL,此处分为了两级路径
前面的是固定路径:127.0.0.1:8080
第一级路径是webapps目录下的war包文件名, 也叫做Context Path,如图 是 hello_servlet
第二级路径是我们代码中在注解标注的路径, 也叫做Servlet Path; 即/war包名(一级路径)/注解标注的路径(二级路径). 如图 注解是 /hello
这里的war包名称为hello_servlet, 注解标注的路径是/hello; 所以综合起来, 加上前面的协议域名和端口号, URL就是http://127.0.0.1:8080/hello_servlet/hello.
总结一下, 这里有7步, 依次是, 创建Maven项目, 引入依赖, 创建webapp目录结构, 编写Servlet代码, 打包, 部署, 验证.
简化流程
在idea内置 smart tomcat
打包跟部署的流程是可以被简化的
方式是在idea里装上插件 smart tomcat
文件 -> 设置 -> 插件 (Plugins)
下载后,点击右上角的长方形框框,点击编辑配置
点击 + 号,找到smart tomcat,第一次使用请填写tomcat存放目录,
Context path 一级路径,默认是项目名。smart tomcat的好处是,此处程序员可以自定义路径昵称
确定后,点击长条框右边的绿色三角形 即可开始运行
但要将电脑上开启的Tomcat都关掉,避免端口被占用。
此处即表示 部署成功
点击下方链接,即可打开页面 但你会发现 页面404了
观察URL发现,只有一级路径,没有二级路径(二级路径就是代码的注释)
补充上二级路径,就能打开看到 hello 吊毛 (不要打我呜呜 Ծ‸Ծ)了
Tomcat 与 smart tomcat 的区别
tomcat 与 idea 上内置的 smart tomcat 是有本质区别的
smart tomcat 执行的时候没有拷贝war包,启动时我们去看tomcat的webapps目录是没有变化的,smart tomcat 是针对某个特定的webapp目录,让idea直接加载运行它,这里没有打包,拷贝,解压缩的过程。
这两种部署方式的直接区别就是: Context Path(一级路径)的不同
Tomcat 是将项目打war包,拷贝到webapps目录下,所以它的一级路径一定要是war包名
而使用smart tomcat方式部署,一级路径可以由程序员自定义,默认是项目名