Servlet

一.概述

Servlet 是Server Applet的简称,意思是为用Java编写的服务器端的程序。它运行在Web服务器当中,web服务器负责Servlet 和客户的通信以及调用Servlet方法。

Servlet的作用:

1.接受用户发送的请求数据

2.调用其他的java程序来处理请求

3.根据处理结果,将结果相应给客户端

二.Servlet的创建和使用

在每一个前端的请求事件中,凡是需要给后端发送请求的,都需要在后端程序中有一个类与之对应响应。

1.创建一个类继承 javax.servlet.http 包下的HttpServlet

2.每个Servlet程序需要被执行都必须在web.xml文件中进行配置

3.通过浏览器访问 http:localhost:8080/项目名/配置的url 运行Servlet程序

eg:下面我们来创建一个Servlet程序(Servlet程序命名规则一般都以servlet结尾):

创建完Servlet类时需要在web.xml文件中去配置servlet程序:

对于Servlet程序:

这个Servlet类中继承了HttpServlet的四个方法,其实也就是对应着Servlet的生命周期,我们先来学习一下这四个方法的用法及意义。

1.无参构造方法:默认是存在的的,用来初始化创建的对象,只能被调用一次(始终都是只创建了一个对象),在第一次访问Servlet程序时由服务器创建执行(Java只是提供了类库,具体实现还是通过各种服务器自己执行,此思想和JDBC中的思想如出一辙)。

2.innit()方法:也是初始化操作,在构造方法执行完成后,立即被调用执行,完成一些对Servlet程序的初始化,也只执行一次。

3.service()方法:用来接收前端请求,为前端提供服务,每次前端发送的请求都会调用service()方法,所以service()方法是可以被多次调用的,发一次请求就会调用一次。其中也有两个属性,HttpServletRequest req 和 HttpServletResponse resp,一个用来发送请求,一个用来响应。

4.destory()方法:销毁操作,指关闭服务器时自动执行,一般是有需要重写。

Servlet生命周期:

1.创建:第一次访问servlet程序时,由服务器创建。

2.初始化:在构造方法执行后,调用innit()执行初始化操作。

3.服务:每次请求调用service()方法。

4.销毁:服务器关闭时,会销毁servlet对象并且在销毁对象时,会自动调用destory()方法,执行一些最终操作。

三.http请求

从前端向后端发送的请求都是http请求。

1.内容

一次http请求包括:请求行,请求头,请求体三部分。

请求行:请求的方式,请求的资源地址等。

请求头:包括主机地址,请求内容编码,客户端环境信息(都是由浏览器自动发送,以键值对形式传递)

请求体:以表单post的形式像后端发送的请求数据。

2.http请求可分为get请求和post请求。

get请求:get请求主要从前端获取信息的,例如网页上的超链接,向后端传递少量信息,请求数据在请求地址中直接拼接,所以传输数据量有限,并且若存在敏感信息就会不安全。

post请求:post请求主要用于向后端发送大量数据,请求数据在请求体中,可以传输大量数据,可以传输大量数据,不会再地址中显示,相对安全。

3.在后端中实现交互

在serve()方法中可以通过请求变量来调用方法去得到从前端请求回来的数据。

并将返回过来的数据打印在控制台中:

后端响应:

java 复制代码
 //响应
        resp.setHeader("content-type","text/html;charset=utf-8");//设置响应的编码格式,因为无法显示中文
        //或 resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();//获得流
        writer.write("<h2>登陆成功</h2>");

4.servlet生命周期补充

在父类中,生命周期中的四个方法都是存在的,也就是说在servlet程序中可以不需要去重写生命周期的四个方法,直接去调用父类的方法就可以了。

在service()方法中:

由上图底层service()方法中,如果请求方式为get时,就会跳转doGet()方法;如果请求方式是post时,就会跳转doPost()方法,所以在servlet程序中,一般我们就只去重写doGet()和doPost()方法就可以了。

注意:post请求中doPost()方法不能接收中文,接受到后端为乱码,所以需要设置解码格式

需要在doPost()方法中设置解码格式:

5.接受请求行和请求头数据

相关推荐
wxin_VXbishe10 分钟前
springboot瑜伽课约课小程序-计算机毕业设计源码87936
java·c++·spring boot·python·spring·servlet·php
嘤嘤奶嘴酱1 天前
dedecms(四种webshell姿势)aspcms webshell漏洞复现
数据库·servlet
weixin_443290691 天前
10- 【JavaWeb】Tomcat、Servlet基础
java·servlet·tomcat
不修×蝙蝠2 天前
后端入门 (JQuery基础) 01
笔记·后端·servlet·html·jquery
VaporGas2 天前
Servlet入门学习笔记-Servlet技术
笔记·学习·servlet
Flying_Fish_roe3 天前
测试-Gatling 与性能测试
servlet
Amagi.3 天前
对比介绍Java Servlet API (javax.servlet)和Apache HttpClient这两个库
java·servlet·apache
测试界吖吖4 天前
使用Jenkins扩展钉钉消息通知
自动化测试·软件测试·功能测试·程序人生·servlet·jenkins·钉钉
烟雨国度4 天前
HTTP 请求处理的完整流程到Servlet流程图
http·servlet·流程图
2301_803110136 天前
项目进度一
servlet·maven·mybatis