初识Servlet

Posted 你这家伙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识Servlet相关的知识,希望对你有一定的参考价值。

1.Servlet简介

Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

2.Servlet,WebApp,Tomcat之间的关系

抽象描述:

  • Tomcat:他就是一个淘宝的平台
  • WebAPP:就是一个一个的店铺(网站,手机APP的应用)
  • Servlet:为WebAPP服务,平台给店家的一些工具

在这之前需要了解maven的相关知识和tomcat的相关知识,maven是一个构建工具,相当一个应用商店,对jar包做相应的打包,发布管理和依赖管理

有关maven的相关知识

maven项目目录说明

在这里插入图片描述

maven生命周期

在这里插入图片描述

有关Tomcat的相关知识

什么是tomcat

Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。

tomcat如何安装

首先进入Tomcat官网下载tomcat
注意:在解压的时候路径不能有中文,否则会出现错误
在这里插入图片描述

tomcat目录说明

在这里插入图片描述

如果tomcat运行失败?
1.查看本机的Java环境是否安装成功
2.Tomcat目录有多余,把多余的文件放到其他位置
3.端口如果被占用,Tomcat默认的端口有两个(8080/8005)。

Tomcat在操作系统和网络协议栈中的位置
在这里插入图片描述
Tomcat 实现的主要是 HTTP 协议,也就是应用层,同时在操作系统的视角里,是属于用户态程序。我们自己的实现是在 Tomcat 基础上运行的。

创建一个servlet

servlet其实就是一组Java类和一组API,其实也就是添加一个servletjar包
首先在找到在中央仓库里面扎到servlet

至于选择哪个版本,这个取决于Tomcat,此时打开Tomcat官网
此时会找到Tomcat8.5对应的servlet版本为3.1
在这里插入图片描述

此时下载servlet的版本3.1,然后将jar包添加到pom.xml里面
在这里插入图片描述

配置web.xml

这里无需记忆servlet具体的xml是什么内容,只需要对固定的xml记录起来,然后使用的时候稍作修改即可

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1"
         metadata-complete="true">
<!--    <servlet>-->
<!--        <servlet-name>helloServlet</servlet-name>-->
<!--        <servlet-class>helloServlet</servlet-class>-->
<!--    </servlet>-->

<!--    <servlet-mapping>-->
<!--        <servlet-name>helloServlet</servlet-name>-->
<!--        <url-pattern>/hello</url-pattern>-->
<!--    </servlet-mapping>-->
</web-app>

创建一个servlet测试类

写具体的servlet项目

  • 编写后端类 必须继承HTTPServlet
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

//首先,创建的servlet都必须实现HttpServlet
public class helloServlet extends HttpServlet {
    //然后重写doGet和doPost请求

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置相应response  header编码格式
        resp.setCharacterEncoding("utf-8");
        //设置响应类型,这里表示将会响应一个html页面
        resp.setContentType("text/html");
        //进行body的输出
        //首先需要一个输出流
        PrintWriter writer = resp.getWriter();
        writer.println("<h1>你好,servlet</h1>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}
  • 配置文件(一个后端类对应一个配置文件)配置url和后端类的关联关系
    在这里插入图片描述

进行打包发布

如何进行发布
1.打开右边的maven,然后点击package
在这里插入图片描述
2.找到生成的war包,然后部署到Tomcat的webApp下
在这里插入图片描述
3.然后访问Tomcat下的hello页面(前提必须是启动了Tomcat)
当我们打开tomcat的时候就会发现我们的java31.war就已经部署在Tomcat下了
在这里插入图片描述
访问hello页面(访问的时候一定要加上这个jar包的名称)

在这里插入图片描述
servlet执行流程
在这里插入图片描述

创建一个静态页面

servlet包含两类文件

  • 动态文件:编写的时候必须写两部分内容:1.后台类;2.web.xml中的映射关系。
  • 静态文件:只需要在webapp里面创建xx.html即可,无需进行其他操作
静态页面

注意:前面我们在目录里面提到过,静态页面是在webapp下的,所以我们就在webapp下创建一个web.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>我是一个servlet的欢迎页面</h1>
</body>
</html>

然后对其进行打包然后部署到Tomcat的webApp下,然后在浏览器输入/java31/web.html,就显示如下页面(前提要启动Tomcat)

在这里插入图片描述

servlet的生命周期

这是servlet的生命周期也是理解servlet的关键
在这里插入图片描述

init方法被设计只调用一次

  • 他在第一次创建servlet的时候被调用,在后续每次用户请求的时候不在调用,因此,他是用于一次性初始化。
  • servlet创建于用户第一次调用对应于该servlet的url时,但是也可以指定servlet在服务器第一次启动时被加载
  • 当用户调用一个servlet时,就会创建一个servlet实例,每一个用户请求都会产生一个新的线程,只等的时候交给doGet或doPost方法,init()方法简单地创建或加载一些数据,这些数据将被用于servlet的整个生命周期

service()方法是执行实际任务的主要方法

  • servlet容器(即Web容器)调用service()方法来处理来自客户端(浏览器)的请求,并把格式化的响应写会给客户端
  • 每次服务器接收到一个servlet请求时,服务器会产生一个新的线程并调用服务,service()方法检查HTTP请求类型(GET,POST,PUT,DELETE等),并在适当的时候调用doGet,doPost等方法,所以,不需要对service()方法做任何动作,只需要根据来自客户端的请求类型来重写doGet或者doPost方法即可
    destroy()方法只会被调用一次,在servlet生命周期结束时被调用
  • destroy方法可以让你的servlet关闭数据库连接,停止后台线程,把cookie列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

总结:
每个 Servlet 对象,在其生命过程中, init() 在启动时被调用一次,destroy() 在退出时被调用一次,service() 在每次请求的处理过程中都会调用一次,最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
在这里插入图片描述
servlet的主要位置
在这里插入图片描述

以上是关于初识Servlet的主要内容,如果未能解决你的问题,请参考以下文章

Servlet 初识

Servlet 初识

Servlet 初识

JavaWeb学习笔记-05初识servlet

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段