第一个Servlet程序

在这里插入图片描述

文章目录

  • 一、Servlet是什么?
  • 二、第一个Servlet程序
    • 1.创建项目
    • 2.引入依赖
    • 3.创建目录
    • 4.编写代码
    • 5.打包程序
    • 6.部署
    • 7.验证
  • 三、IDEA部署Servlet程序
    • smart tomcat
    • Tomcat Server
    • 常见错误

一、Servlet是什么?

Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app.
大家需要注意,网页可以分为两类:
1.静态页面:网页内容始终固定的页面
2.动态页面:用户不同/时间不同/输入参数不同时页面的内容会发生变化

Servlet主要进行的工作:
1.允许我们程序员创建一个类,tomcat收到某个特定路径的HTTP请求时,执行该类中的某个方法
2.对HTTP请求进行解析,并将HTTP请求从一个字符串解析成一个HttpRequest对象
3.我们程序员只需要给指定的HttpResponse对象的一些属性字段填写,Servlet就会自动的按照HTTP协议的方式构造出一个HTTP响应的字符串,然后通过Socket写回客户端

Servlet是tomcat提供的一组API,让我们用户不必关注Socket,HTTP协议格式等细节,降低了web开发的门槛,提高开发效率

二、第一个Servlet程序

我们现在就来编写我们第一个Servlet程序吧,写一个helloworld程序,部署到tomcat上,然后通过浏览器去访问,在网页上得到hello world字符串,一共需要一下7个步骤:

1.创建项目

此处我们需要创建一个maven项目
第一个Servlet程序_第1张图片
如果是首次使用maven,项目创建好之后会在下面读条,去中央仓库加载一些maven的依赖,因为中央仓库在国外,所以这里读条的过程可能比较久,前面我们已经介绍过maven的使用了,这里我们就不再一一解释了。
第一个Servlet程序_第2张图片
我们的将settings中的maven设置为我们下载的maven,而不是IDEA自带的maven
第一个Servlet程序_第3张图片

2.引入依赖

我们需要在pom.xml引入servlet的依赖,我们在中央仓库搜索一下maven
第一个Servlet程序_第4张图片
这里我们使用servelt 3.1.0,和tomcat 8是匹配的
第一个Servlet程序_第5张图片
下面即是我们servlet的坐标依赖
第一个Servlet程序_第6张图片


<dependency>
    <groupId>javax.servletgroupId>
    <artifactId>javax.servlet-apiartifactId>
    <version>3.1.0version>
    <scope>providedscope>
dependency>

第一个Servlet程序_第7张图片
我们需要先在pom.xml中创建该标签,该标签中可以放多个依赖,我们将servlet依赖粘贴进去即可
第一个Servlet程序_第8张图片
如果是首次使用,这里可能会爆红,我们需要手动刷新导入一下
第一个Servlet程序_第9张图片
这两个刷新按钮都可以

3.创建目录

虽然maven已经帮我们自动创建了一些目录,但是还不够,因为此处我们使用maven开发的是一个web程序,还需要一个额外的目录
1.在main目录下,创建一个webapp目录,该目录和java,resources并列
第一个Servlet程序_第10张图片
2.在webapp目录下创建WEB-INF目录
第一个Servlet程序_第11张图片
3.在WEB-INF目录下创建一个web.xml文件
第一个Servlet程序_第12张图片
4.给web.xml写入指定配置



<web-app>
<display-name>Archetype Created Web Applicationdisplay-name>
web-app>

第一个Servlet程序_第13张图片
大家需要注意一点,有些同学这里的代码是红色的,但并不代表是错的

4.编写代码

我们在java目录下创建一个HelloServlet类然后继承HttpServlet类
第一个Servlet程序_第14张图片
Servlet api提供了现成的HttpServlet类,我们只需要继承该类,然后重写部分方法即可
我们这里重写doGet方法
第一个Servlet程序_第15张图片
我们输入doG直接快捷键完成即可
第一个Servlet程序_第16张图片
我们来看一下HttpServlet是如何处理doGet的
第一个Servlet程序_第17张图片
我们发现,父类是直接写回一个错误,所以我们这里需要将父类的super.doGet()删除,然后自己实现逻辑。
大家需要注意,我们这里重写的doGet方法不需要我们手动调用,而是tomcat收到get请求,就会触发doGet方法,tomcat会构造好两个参数,req和resp,req是TCP socket中读出来的字符串,按照HTTP协议解析得到的对象,resp是一个空的对象(不是null,只是里面的各个属性没有设置)。
第一个Servlet程序_第18张图片
我们需要在类上面加一个注解,注解是java中特殊的类,java中定义一种特殊的’语法糖"来实现注解,注解的作用,是针对一个类/方法,进行额外的解释说明,赋予该类/方法额外的功能/含义
此处这里的 @WebServlet 注解的作用是把当前类和一个HTTP请求路径关联起来,tomcat收到GET请求后,根据GET请求的路径去触发不同的类
第一个Servlet程序_第19张图片
resp.getWriter()会得到一个Writer对象,此处的writer对象是属于resp对象的,此处的write操作其实是往resp的body部分进行写入,等resp对象整个构造好了,tomcat会统一转成HTTP相应的格式,写入socket

5.打包程序

这里我们需要将程序打成war包,jar只是一个普通的java程序,war则是tomcat专属用来描述webapp的程序,一个war就是一个webapp,但是我们maven默认是打成jar包,我们需要在pom.xml配置一下
第一个Servlet程序_第20张图片
第一个Servlet程序_第21张图片
第一个Servlet程序_第22张图片
点击package进行打包
第一个Servlet程序_第23张图片
第一个Servlet程序_第24张图片
如果大家打包后没有出现target,大家需要刷新(reload)一下项目。

6.部署

将刚才打包好的war拷贝到tomcat的webappas目录下,无论tomcat是在同一个电脑还是在不同电脑上,都是这样拷贝,需要注意如果tomcat正在运行时,直接拷贝,tomcat虽然能识别,但是在windows上可能会出现Bug
第一个Servlet程序_第25张图片

7.验证

启动Tomcat,在浏览器地址栏输入对应url
第一个Servlet程序_第26张图片
第一个Servlet程序_第27张图片
第一个Servlet程序_第28张图片
我们刚刚在浏览器地址输入url之后,浏览器就构造了一个GET HTTP 请求,发给了tomcat,tomcat然后根据一级目录,确定了具体的webapp,根据第二级路径,确定了是调用哪个类,再通过GET/POST方法确定调用HelloServlet的那个方法。

上述是我们servelt最朴素的步骤,我们也可以通过一些操作来简化上述操作

三、IDEA部署Servlet程序

smart tomcat

我们在tomcat那篇文章,详细介绍了Tomcat的使用,以及smart插件的使用,这里我们只是演示一下,不再详细介绍了。
第一个Servlet程序_第29张图片
点击+新增配置,选中smart tomcat
第一个Servlet程序_第30张图片
配置tomcat

第一个Servlet程序_第31张图片
运行tomcat
第一个Servlet程序_第32张图片
第一个Servlet程序_第33张图片
不要去点击这里的地址,我们需要在地址栏手动输入url
第一个Servlet程序_第34张图片
smart tomcat的工作原理,不是说把war包拷贝(webapps里不变),而是tomcat启动的时候显式指定了一个webapp目录,相当于加载单个webapp运行,ided直接调用tomcat,让tomcat加载当前项目中的目录,这个过程没有打war包,没有拷贝,也没用解压缩的过程
大家需要注意:如果我们直接拷贝war包的方式部分,context path就是war包名,如果是smart tomcat方式部署,这里是可以配置的,默认是项目名

Tomcat Server

需要注意的是使用Tomcat Server部署的时候,需要将项目打成war包
第一个Servlet程序_第35张图片

第一个Servlet程序_第36张图片
第一个Servlet程序_第37张图片
第一个Servlet程序_第38张图片
将我们打好的包,添加进来
第一个Servlet程序_第39张图片
然后网页访问即可
第一个Servlet程序_第40张图片

常见错误

1.404
路径写错了,如果大家出现了404将自己地址栏输入的url与Context path
第一个Servlet程序_第41张图片
和servlet path对应看是否一致
第一个Servlet程序_第42张图片
webapp没有正确被部署: web.xml 写错了

2.405
405 表示对应的 HTTP 请求方法没有实现,比如我们在浏览器发了个GET请求,但是代码里没写doGet,此时就会出现405,因为我们父类的doGET里的代码就是返回405
第一个Servlet程序_第43张图片
3.500
本质上就是我们的代码抛异常了,500的时候日知会明确告诉我们异常调用栈,告诉我们是哪一行代码出的异常
第一个Servlet程序_第44张图片

4.出现空白页面
我们的方法中没有写resp.getWriter().write()方法

5.出现"无法访问此网站"
原因可能是tomcat没有启动好,我们需要检查我们的tomcat是否启动好了

你可能感兴趣的:(JAVA,EE,servlet,java,tomcat)