一、基础知识
1、Servlet简介
Servlet是JavaWeb应用中最核心的组件,它是运行在Web服务器的Java应用程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
Servlet的运行需要Servlet容器支持,Servlet容器通过调用Servlet对象提供的标准API接口对请求进行处理。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet指的是任何实现了Servlet接口的类,一般人们理解为后者。
Servlet的主要功能如下:
- 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单。
- 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
- 处理数据并生成结果。
- 发送显式的数据(即文档)到客户端(浏览器)。
- 发送隐式的 HTTP 响应到客户端(浏览器)。
特点:
- 运行在支持java的应用服务器上。
- Servlet的实现遵循了服务器能够识别的规则,即服务器会根据请求对应的servlet进行请求处理。
- 简单方便,可移植性强。
2、Servlet结构体系
(1)Servlet接口
在Servlet开发中,任何一个Servlet对象都直接或间接实现javax.servlet.Servlet接口,该接口包括5个方法:
(2)ServletConfig接口
ServletConfig接口位于javax.servlet包中,它封装了Servlet的配置信息,在Servlet初始化期间被传递。该对象定义了4个方法:
(3)GenericServlet类
该类是一个抽象类,创建Servlet对象时,可以简化程序代码。
(4)HttpServlet类
HttpServlet类是一个抽象方法,可以很方便的对HTTP请求进行处理和响应。
3、Servlet生命周期
- 加载Servlet类,创建Servlet实例。
- Servlet 通过调用 init () 方法进行初始化:可在web.xml文件中为servlet指定初始化参数。
- Servlet 调用 service() 方法来处理客户端的请求:对于收到的每个Http请求,容器会调用service()方法处理请求。对于HttpServlet类,通常调用doGet()、doPost()等方法。
- Servlet 通过调用 destroy() 方法终止。
- 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回。
(1)init()方法
init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,但是您也可以指定 Servlet 在服务器第一次启动时被加载。
(2)service()方法
service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
(3)destroy()方法
destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。该方法可以关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。
二、Servlet基本应用
1、Servlet创建主要有两种方式
- 第一种为创建一个普通的Java类,使这个类继承HttpServlet类,再通过手动配置Web.xml文件注册Servlet对象。
- 第二种方法直接通过IDE集成开发工具进行创建。
2、Servlet配置
通过Servlet配置,告诉web容器哪个请求调用哪一个Servlet对象处理,对Servlet起到一个注册作用。
Servlet配置包含在web.xml文件中,主要通过以下两步:
(1)声明Servlet对象
通过<servlet>标签声明一个Servlet对象,该标签包括两个子元素,<servlet-name>和<servlet-class>。
<servlet>
<servlet-name>添加Servlet的名称</servlet-name>
<servlet-class>添加Servlet的全类名</servlet-class>
</servlet>
(2)映射Servlet
<servlet-mapping>
<servlet-name>添加Servlet的名称</servlet-name>
<url-pattern>映射具体访问URL</url-pattern>
</servlet-mapping>
3、创建一个简单的Servlet web 项目
(1)打开eclipse创建Dynamic Web Project项目
File-New-Dynamic Web Project
填写项目名称
点击Next-Next-勾选Generate web.xml...-点击Finish
可能出现以下问题:
将本机的网络连接禁用,该工程此时即可创建完成,接着再启用网络连接。
(2)Java Resources src下添加java包
New-Package
填写包名
(3)在新建的包下创建Java类
New-Class
在对话框中填写类名,并继承HttpServlet类
最后点击Finish。
(4)编辑Java类
覆写service(注意使用"Alt+/")
添加以下内容:
通过实行javax.servlet.http.HttpServlet抽象类来处理Http请求。
package com.herry.bean;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.getWriter().write("this is my servlet test(test)");
System.out.println("this is my servlet test");
}
}
(5)在web.xml中创建serlvet链接器。
web.xml在WEB-INF目录下,双击打开web.xml,进入source模式。
配置servlet如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<!-- 配置servlet -->
<!-- 配置servlel类路径 -->
<servlet>
<servlet-name>myServlet</servlet-name> <!-- servlet名字自定义 -->
<servlet-class>com.herry.bean.MyServlet</servlet-class> <!-- servlet类的路径-->
</servlet>
<!-- 配置servlel访问方式 -->
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/myServlet</url-pattern>
</servlet-mapping>
</web-app>
(6)保存(Ctrl+S)后,查看java文件是否编译成class文件
查看class文件位置WEB-INF文件下:
如果没有要对eclipse进行如下设置。
1)查看eclipse 下Project-Bulid Automatically是否勾选,没有则勾选
勾选之后,eclipse编辑下没保存一下自动编译
2)如果还是没有class文件,进行路径设置
Project-Clean 清除已经编译的结果
项目右键-Properties-Java Build Path-Source
将Default output folder设置为MyServlet/WebContent/WEB-INF/classes,
之后发现eclipse工作空间下有了class文件
以上参考连接:https://blog.csdn.net/qq_34801169/article/details/80466092
(7)将创建好的web工程的WebContent复制到Tomcat的Webapps
1)进入MyServlet的工作路径
选择MyServlet-File-Properties
2)将MyServlet项目的WebContent的所有内容复制到Tomcat的下webapps
选择以下三个文件:
在tomcat的安装路径下D:\apache-tomcat-9.0.31\webapps新建projecct文件夹,并将以上三个文件复制到该文件夹下
(9)启动tomcat
点击startup.bat
(10)测试结果
浏览器输入http://localhost:8080/project/myServlet
参考:https://www.bilibili.com/video/BV1bb411b7Cq?p=6