Servlet学习目录
一、Servlet是什么?
servlet : server applet 服务器的小程序 , 能够被运行的程序
- servlet运行在服务器端的java程序。
- Servlet是一个接口,一个类要想通过浏览器被访问到,那么这个类就必须直接或间接的实现Servlet接口
作用
接收请求,处理请求,生成响应
对比普通的类和servlet
- servlet必须运行在web服务器上,普通的类可以在任何项目中
- servlet做的事情是(接收请求,处理请求,生成响应);普通的类做的事情是我们自定义的
- servlet的对象是web服务器创建的;普通的类的对象目前都是我们自己创建的.
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、使用步骤
① 编写步骤
- 创建一个 WEB 项目。
- 创建一个类实现Servlet接口。
- 重写 service 方法。
- 在 web.xml 中配置 Servlet。
- 部署并启动项目。
- 通过浏览器测试
② 代码编写
web.xml中HelloServlet的配置
<?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">
<!--告诉web服务器我是一个servlet,我叫什么-->
<servlet>
<!--自定义,项目中必须唯一-->
<servlet-name>A_HelloServlet</servlet-name>
<servlet-class>com.itheima.web.servlet.A_HelloServlet</servlet-class>
</servlet>
<!--告诉web服务器我能干啥,能处理那个路径的请求-->
<servlet-mapping>
<!--复制前面起好的名字-->
<servlet-name>A_HelloServlet</servlet-name>
<!--目前及以后大家都用/开头-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
servlet代码
public class A_HelloServlet implements Servlet{
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("我收到了请求");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
## 1.3 Servlet相关API
- 第一次访问时创建
优势:减少对服务器内存的浪费。提高了服务器启动的效率。
弊端:如果有一些要在应用加载时就做的初始化操作,无法完成。- 服务器加载时创建
优势:提前创建好对象,提高了首次执行的效率。可以完成一些应用加载时要做的初始化操作。
弊端:对服务器内存占用较多,影响了服务器启动的效率。
(三) 生命周期
- 生命周期:指的是一个对象从生(创建)到死(销毁)的一个过程
public void init(ServletConfig servletConfig);初始化
public void service(ServletRequest servletRequest, ServletResponse servletResponse);服务
public void destroy();正常销毁
面试题:
servlet其实是一个单例对象. 单例: 对象只能被初始化一次 单实例多线程
servlet是单实例的线程不安全的对象.(不要给它声明成员变量)
默认第一次请求来的时候,web服务器(servlet容器)会创建servlet的对象,执行servlet的init方法,实现初始化操作,然后执行servlet的service方法来处理当次请求.
再有请求来的时候,tomcat会获取一个线程,在当前线程中,会调用servlet的service方法来处理请求
当servlet被移除的时候或者web服务器关闭的时候,执行servlet的destory方法来显示销毁操作
① 创建servlet的三种方式
- 第一种
实现 Servlet 接口,实现所有的抽象方法。该方式支持最大程度的自定义。- 第二种
继承 GenericServlet 抽象类,必须重写 service 方法,其他方法可选择重写。
该方式让我们开发 Servlet 变得简单。但是这种方式和 HTTP 协议无关。- 第三种
继承 HttpServlet 抽象类, 不需要重写任何方法 不报错,需要重写 doGet 和 doPost 方法。
该方式表示请求和响应都需要和 HTTP 协议相关。