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.接受请求行和请求头数据

相关推荐
敲代码娶不了六花9 小时前
jsp | servlet | spring forEach读取不了对象List
java·spring·servlet·tomcat·list·jsp
豪宇刘1 天前
MyBatis的面试题以及详细解答二
java·servlet·tomcat
编程、小哥哥3 天前
在 Docker 中部署 Jenkins,并完成项目的构建和发布
servlet·docker·jenkins
weixin_537590454 天前
《Java编程入门官方教程》第八章练习答案
java·开发语言·servlet
Ttang235 天前
Tomcat原理(4)——尝试手动Servlet的实现
java·开发语言·servlet·java-ee·tomcat·intellij-idea
loop lee6 天前
计算机网络 - HTTP 协议和万维网
java·网络协议·servlet·tomcat
不修×蝙蝠6 天前
搭建Tomcat(四)---Servlet容器
java·服务器·servlet·tomcat·搭建resquest
像污秽一样6 天前
简易记事本开发-(SSM+Vue)
java·vue.js·spring boot·spring·servlet·maven·mybatis
计算机学无涯8 天前
Servlet学习中遇到的一些问题及解决
servlet
测试工程师成长之路8 天前
解锁 Jenkins 搭建全攻略
运维·servlet·jenkins