Servlet详细教程


Servlet

servlet 简介

servlet 全称为 server applet 是服务器的小程序,是用 java 语言编写的服务器程序,目的是和浏览器交互并且动态的生成 web 内容; servlet 具体是指实现了 Servlet 接口的类,servlet 运行于支持 java 的应用服务 器(tomcat)中。 从原理上讲,servlet 可以响应任何的请求,但是在绝大多数时 servlet 用来扩展基于http 协议的 web 服务。 简单理解:之前学习过的 JDBC 技术是用来实现 java 语言和数据库之间的连接技术,现在 需要实现 java 语言和浏览器进行连接,就需要一个像 JDBC 这样的一个中间件,servlet 就作为这个中间件;

Servlet 入门案例

使用 servlet + jsp 技术,实现页面登录时用户名和密码输入,后台获取页面上输入的用 户名和密码;

页面编写

在这里插入图片描述

web.xml

在这里插入图片描述

servlet 类

/**
* 通过 web.xml 配置文件建立与前端页面和后台 servlet 连接
* 在 servlet 类中就可以针对页面发送的请求进行对应的处理;
* 处理请求的方案,要根据页面发送请求时的请求方式来决定:
* jsp 页面上常用两种请求方式:
*  ① get  -- servlet 类中可以使用 doGet 方法来进行请求的处理
*  ② post -- servlet 类中可以使用 doPost 方法来进行请求的处理
* 如果不知道页面发送请求时的请求方式,servlet 类中有提供通用
* 方法 service 该方法可处理任意方式的请求;
* service 方法的工作原理:
* ① 拦截请求,任意请求方式的请求都能拦截
* ② 分析被拦截的请求具体使用的是哪种请求方式
* ③ 根据分析结果去调用对应的 doXXX 方法来处理该请求 */
public class LoginServlet extends HttpServlet {
/* Servlet 接口中定义好的 doGet 方法,用于页面的 get 请求处理*/
@Override
protected void doGet(HttpServletRequest req,                HttpServletResponse resp) throws ServletException, IOException {
/**
* 请求处理三部曲:
* ① 获取请求参数
* ② 请求参数处理
* ③ 响应结果给页面 */
String username = req.getParameter("username"); String pwd = req.getParameter("pwd");

System.out.println(username + "----" + pwd);
}

/* Servlet 接口中定义好的 doPost 方法,用于页面的 post 请求处理*/
@Override
protected void doPost(HttpServletRequest req,               HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}

/* Servlet 接口中定义好的 Service 方法,可用于任意请求处理*/
@Override

页面提交 get 请求

在这里插入图片描述

控制台输出结果

在这里插入图片描述

Servlet 和 Tomcat 关系

Servlet 是 tomcat 的一个组件,Servlet 的功能需要依赖 tomcat 的 servletapi.jar;在 web 工程启动时,有了这个 jar 包就可以直接使用里面的功能,tomcat
会直接解析运行。
Tomcat 在启动时,会根据 web.xml 配置文件进行容器的初始化;初始化
ServletConfig、ServletContext 对象,以及 HttpServletRequest 和
HttpServletResponse 对象;一起交给 Servlet;此后 Servlet 就具备了相关的一
些功能;

servlet-api

servlet-api 下主要有两部分内容;一个是 javax.servlet,另一个是
javax.servlet.http;
javax.servlet 中主要是一些接口的定义,例如 Servlet 接口、抽象类
GenericServlet,这些都是通用的接口或者抽象类;
javax.servlet.http 中定义了与 http 请求相关的类和接口;例如HttpServlet类、
HttpServletRequest 和 HttpServletResponse 接口;
Servlet 接口、 GenericServlet 抽象类、 HttpServlet类 三者之间的关系如下
图:

在这里插入图片描述
在这里插入图片描述

在自定义 servlet 类时,可以直接实现 Servlet 接口或者是继承抽象类
GenericServlet;但是不建议这么做,因为在接口和抽象类中会存在大量的抽象方法,需要
重写不必要的方法;HttpServlet 作为 GenericServlet 的子类,必然已经实现类接口
和抽象中的抽象方法,所有继承 HttpServlet 不需要去重写大量的抽象方法,只需要关注
我们需要的方法即可;
因此 HttpServlet 类时我们在自定义 Servlet 类的首选父类;

get 和 post 请求

get 和 post 是页面在进行数据提交时的两种不同方式,在 servlet 进行处理时也会有对
应的方法;
get -- doGet 方法
post -- doPost 方法
doGet 和 doPost 都是 service 方法的拆分;不管页面是以哪种请求方式进行请求的发
送,都会先通过 service 方法,由 service 方法进行分析,再来决定该调用什么方法进
行请求的处理;
两种请求方式的区别:
① 参数传递方式不同:
get 所有的请求参数都会在地址栏进行拼接;
post 不会在 url 中显示,而是在请求内容中,相对于 get 更安全
② 传送数据大小不同
get 传送的数据量较小,主要是因为 url 长度受限;
post 传送的数据一般认为是不受限制的;
③ 信息缓存
get 提交的数据能被缓存,请求保留在浏览器的历史记录中;
post 一半不能被缓存,不会保存在浏览器的历史记录中;
④ 编码方式与乱码
get 请求默认编码格式为 ISO-8859-1(tomcat8以前),tomcat8 以后默认为
utf-8;因此在使用 tomcat8 以前的版本进行请求参数获取时,需要进行编码格式的转换;
String username = request.getParamter("username");
String new_name = new String(username.getByte("iso-8859-
1"),"utf-8");
post 请求支持多种编码类型,可以使用更好的方式进行编码的转换
request.setCharacterEncoding("UTF-8");
如果是在响应的时候乱码,也可以使用 response 对象进行响应编码设置
response.setContentType("text/html",charset="utf-8")
总结:表单或者是 AJAX 在进行请求发送时,一般使用 post 请求方式;如果是 a 标签进
行请求的发送,默认是 get 请求;
Servlet 生命周期
案例
doGet 和 doPost 都是 service 方法的拆分;不管页面是以哪种请求方式进行请求的发
送,都会先通过 service 方法,由 service 方法进行分析,再来决定该调用什么方法进
行请求的处理;
两种请求方式的区别:
① 参数传递方式不同:
get 所有的请求参数都会在地址栏进行拼接;
post 不会在 url 中显示,而是在请求内容中,相对于 get 更安全
② 传送数据大小不同
get 传送的数据量较小,主要是因为 url 长度受限;
post 传送的数据一般认为是不受限制的;
③ 信息缓存
get 提交的数据能被缓存,请求保留在浏览器的历史记录中;
post 一半不能被缓存,不会保存在浏览器的历史记录中;
④ 编码方式与乱码
get 请求默认编码格式为 ISO-8859-1(tomcat8以前),tomcat8 以后默认为
utf-8;因此在使用 tomcat8 以前的版本进行请求参数获取时,需要进行编码格式的转换;
String username = request.getParamter("username");
String new_name = new String(username.getByte("iso-8859-
1"),"utf-8");
post 请求支持多种编码类型,可以使用更好的方式进行编码的转换
request.setCharacterEncoding("UTF-8");
如果是在响应的时候乱码,也可以使用 response 对象进行响应编码设置
response.setContentType("text/html",charset="utf-8")
总结:表单或者是 AJAX 在进行请求发送时,一般使用 post 请求方式;如果是 a 标签进
行请求的发送,默认是 get 请求;

Servlet 生命周期

Servlet 生命周期指 servlet 从初始化到被销毁的整个过程;整个过程分为三个阶段:
① 容器的初始化 -- init()
② 容器的使用 -- service -- doXX
③ 容器销毁 -- destroy
初始化是在服务器启动后第一次访问 servlet 时;容器只会初始化一次;
使用是在页面发送请求后,使用对应的方法进行请求的处理;
销毁是服务器关闭;
一个 Servlet 想要正常的工作,必须先进行容器的初始化,然后根据请求方式提供对应的服
务;

案例

public class LifeServlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("容器被初始化了.....");
}
@Override
protected void service(HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
System.out.println("提供服务.....");
}
@Override
public void destroy() {
System.out.println("容器被销毁.....");
}
}

web.xml

在这里插入图片描述

发送请求

在这里插入图片描述

执行结果
在这里插入图片描述

如果需要在服务器启动时就进行容器的初始化,可以在 web.xml 配置文件中进行初始化时间
的设置;
<load-on-startup>0</load-on-startup>
设置为大于等于0的整数,表示在服务器启动时就进行容器的初始化;

在这里插入图片描述

HttpServletRequest 接口

简介

HttpServletRequest 接口称为请求处理对象,是 ServletRequest 的子接口,在
Serlvlet 初始化时被创建(可能是容器启动时,或者是第一次访问容器时)并且交给
service 方法来使用;
请求对象可用于接收客户端请求、获取请求参数,还可以获取主机地址、端口号、请求方式、
项目路径等功能;
一个请求被分为三个部分:分别是请求行、请求头、请求体	

请求行

通过 request 对象相应的方法可以获取请求行中的内容;请求行中主要包含:http 协议、
服务、端口、项目名称、请求方式、参数列表等;

jsp 页面

在这里插入图片描述

web.xml

在这里插入图片描述

servlet 类

在这里插入图片描述

请求头

请求头是当前用户发送的数据的描述信息;
请求头内容时浏览器在发送请求时自动添加的,不需要编程人员操作;
如果想要查看请求头中的内容,可以使用 getHeader 方法进行获取;

jsp 页面

在这里插入图片描述

web.xml

在这里插入图片描述

servlet 类

在这里插入图片描述

请求体

请求体就是发送请求是所携带的数据,也就是后台需要去获取的页面传递的参数;
使用 request 提供的 getParamter 方法或者是 getParamterValues 方法进行传递
参数的获取;两个方法的返回值都是 String 类型;即是不管页面上输入的是什么类型的数
据,最终获取到后都是字符串;

jsp 页面
在这里插入图片描述

web.xml

在这里插入图片描述

servlet 类

在这里插入图片描述

文件上传

文件上传指的是将本地的文件上传到服务器;使用 form 表单和请求对象来实现,和常规的请
求参数略有不同;
首先在 form 标签中需要添加一个额外的属性来支持表单实现文件上传的功能
<form action="" method="" enctype="multipart/form-data"></form>; 有
了 enctype="multipart/form-data" 属性,请求方式必须是 post 请求;
其次对于处理文件上传请求的 servlet 需添加一个注解 @MultipartConfig

jsp 页面
在这里插入图片描述
在这里插入图片描述

FileServlet 类

在这里插入图片描述

Servlet 第一天 一、简述 1、Servlet,服务器端的小程序,它是相对于Applet 而言的,Applet 是客户端小程序。 Servlet,是接受来自网络的请求(form 表单,以及其他的请求),并对不同请求作出不同的响应 Servlet,是基于Http 协议的,是运行在web 服务器中的程序。这里要提出一个容器的概念。 servlet 是运行在web 容器中,在后面会详细地讲解,这个web 容器可以控制Servlet 对象的生命周期,控制请 求由Servlet 对象处理。 2、web 服务器,这里的服务器不是硬件概念,而是软件,常用的web 服务器有Tomcat,Jboss 等,我们所用到的 Tomcat 是一个开源的服务器, Tomcat 是一个用java 语言编写的web 服务器,所以需要有相应的java 运行环境,也就是JVM,还要配置tomcat 的具体路径。 二、Tomcat 的配置 JAVA_HOME=/XXX/XXX/(JDK 路径,bin 的上一层目录) CATALINA_HOME=/XXXX/XXX(tomcat 的绝对路径windows 中X:\xxx\xxx) 在启动Tomcat 时,是运行Tomcat 的bin 目录下的startup.sh(windows 中使用startup.bat) 判断Tomcat 是否启动成功,可以在浏览器的地址栏中使用http://localhost:8080/或http://127.0.0.1:8080/可以访问到 tomcat 的主页就是启动成功了。 要想停止tomcat 服务器要使用shutdown.sh(windows 中使用shutdown.bat),如果直接关闭启动窗口,就会造成 8080 端口占用错误,这时可以在使用shutdown.sh 关闭一下服务器。 startup.sh,shutdown.sh,shutdown.bat,startup.bat 这些文件其实是一些脚本文件用来执行大量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

划水的阿瞒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值