第一个Servlet程序

目录

一、什么是Servlet

二、Servlet主要做的工作 

三、如何使用Servlet进行编程

1、创建maven项目

2、引入依赖

3、创建目录

4、编写代码

5、打包代码

6、部署

7、验证程序

四、使用插件简化打包和部署

五、使用插件运行与直接拷贝运行的区别

六、Servlet 程序中常出现的问题

1、404(浏览器访问的资源,在服务器上不存在)

2、405(发送的请求的方法,和代码不匹配)

3、500(最常见,也最好解决)

4、空白页面

5、无法访问此网站


一、什么是Servlet

Servlet是Tomcat提供给我们使用的一组操作HTTP协议的API

它不是我们自己写的一个独立的程序,而是写的一个代码片段,把它插入到tomcat中,让Tomcat来调用执行(framework-框架)

 

二、Servlet主要做的工作 

  1. 允许程序猿注册一个类, 在 Tomcat 收到某个特定的 HTTP 请求的时候, 执行这个类中的一些代码.
  2. 帮助程序猿解析 HTTP 请求, 把 HTTP 请求从一个字符串解析成一个 HttpRequest 对象.
  3. 帮助程序猿构造 HTTP 响应. 程序猿只要给指定的 HttpResponse 对象填写一些属性字段, Servlet就会自动的安装 HTTP 协议的方式构造出一个 HTTP 响应字符串, 并通过 Socket 写回给客户端.

简而言之, Servlet 是一组 Tomcat 提供的 API, 让程序猿自己写的代码能很好的和 Tomcat 配合起来, 从 而更简单的实现一个 web app.

而不必关注 Socket, HTTP协议格式, 多线程并发等技术细节, 降低了 web app 的开发门槛, 提高了开发效率.

三、如何使用Servlet进行编程

1、创建maven项目

创建maven项目

说明:maven是一个构建工具,功能是帮助我们去构建,测试,打包一个项目

为啥要使用maven,直接点运行不行吗?不行!!! 

在公司中,一个项目可能涉及到很多个模块(存在依赖关系),还可能会依赖很多的第三方库

maven项目的目录结构

2、引入依赖

Servlet是Tomcat提供的API(不是标准库的,需要额外下载Servlet的jar包)

如何下载?

到中央仓库下载:中央仓库链接

搜索servlet即可,有一个细节点,选择版本时一定要选择 3.1.0 的版本,这个版本是和 Tomcat 8.5 版本相匹配的

下载Servlet依赖

 

 这里可以放 N 个 dependency,可以用来引入多个第三方依赖

只要把这一段代码往这里一拷贝,IDEA 就会自动调用 maven,从中央仓库下载该 jar 包

3、创建目录

web.xml 是给 Tomcat 看的,Tomcat 从 webapps 目录中加载 webapp,就是以 web.xml 为依据的

pom.xml 是给 maven 看的

将以下代码直接拷贝复制到 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>

4、编写代码

编写代码3步走

 

  1. 继承 HttpServlet 父类
  2. 重写 doGet 方法
  3. 写注解

在 doGet 方法中,要完成的工作就是,根据请求,计算生成响应

对于一个服务器程序来说,基本工作流程:

  1. 读取请求并解析
  2. 根据请求计算响应
  3. 把响应写回给客户端

在 Servlet 中,1 和 3 我们无需关系(Tomcat 已经帮我们处理好了),只需要关注第 2 步即可

5、打包代码

刚刚写的程序,不能直接独立的运行,而是必须要放到 Tomcat 上运行(部署)

部署的前提,是先打包

对于一个规模比较大的项目,里面会包含很多的 .java 文件,进一步就会产生很多的 .class 文件,所以,把这些 .class 打成一个压缩包,再进行拷贝,是比较科学的

在 Java 中,使用的压缩包,jar (普通程序打成 jar)和 war(要部署到 Tomcat 的打成 war)

war 和 jar 本质上没啥区别,都是把一堆 .class 文件打包进去了,但是 war 包是属于 Tomcat 的专属格式,里面会有一些特定的目录结构和文件,不如 web.xml,后续 Tomcat 就会识别这些内容,来加载 webapp(Tomcat 专属定制版 jar 包)

打包压缩的2步

 

打包

 打包操作,做的事情:

  1. 检查代码中是否存在一些依赖,依赖是否下载好(由 maven 负责的)
  2. 把代码进行编译,生成一堆 .class 文件
  3. 把这些 .class 文件,以及 web.xml 按照一定的格式进行打包

6、部署

把打好的 war 包,拷贝到 webapps 目录底下

Tomcat 会自动进行解压(无需自己手动操作)

7、验证程序

不是 Tomcat 一启动,我们写的 doGet 就会执行,只有在收到 GET 请求时,并且路径匹配正确的情况下,才能够执行

路径分两级:

1.hello_servlet,称为 Context Path(上下文路径)或 Application Path,标识了一个 webapp(也就是 war 包名)

2.hello,称为 Servlet Path,表示当前请求要调用哪个 Servlet 类的 doGet 方法(一个 webapp中,可以有多个 Servlet,自然可以有多个 doGet 方法)

此时向浏览器发送一个GET请求即可得到响应

到此为止,步骤已经全部完成,当然,五六两个步骤可以简化合并,只需要借助IDEA提供的插件即可

四、使用插件简化打包和部署

Smart Tomcat 插件

 

配置

说明: 如果程序是拷贝 war 包到 webapps 中运行,此时 Context Path 是 war 包名字

如果程序是使用 Smart Tomcat 运行,Context Path 是在上述配置中,手动设置的

五、使用插件运行与直接拷贝运行的区别

这两者存在本质区别: 

Smart Tomcat 使用了 Tomcat 另外一种运行方式,在运行 Tomcat 的时候,通过特定参数,来指定 Tomcat 加载某个特定目录中的 webapp,因此,插件方式运行,既不会打包,也不会拷贝(打开 Tomcat 的 webapps 可以看到里面毫无变化)

六、Servlet 程序中常出现的问题

1、404(浏览器访问的资源,在服务器上不存在)

  1. 请求路径写错了
  2. 路径写对了,但是 war 包没有被正确加载

2、405(发送的请求的方法,和代码不匹配)

  1. 发送的是 GET 请求,但是代码里面是 doPost
  2. 忘记盖掉 super.doXXX

3、500(最常见,也最好解决)

服务器代码出现异常,改代码即可

4、空白页面

服务器没有返回任何数据,doGet 方法里面什么也没有写

5、无法访问此网站

Tomcat 可能关闭了,重新启动即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值