第一个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 可能关闭了,重新启动即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值