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

相关推荐
LSL666_5 小时前
1 概述及简单登录(不涉及数据库)
数据库·servlet
合作小小程序员小小店17 小时前
网页开发,在线%旧版本旅游管理%系统,基于eclipse,html,css,jquery,servlet,jsp,mysql数据库
java·数据库·servlet·eclipse·jdk·旅游·jsp
老板多放葱和香菜1 天前
1大数据平台及组件搭建https://baijiahao.baidu.com/s?id=1849543147230084630
java·大数据·servlet
百***35942 天前
从0到1部署Tomcat和添加servlet(IDEA2024最新版详细教程)
hive·servlet·tomcat
CodeZ-Hao3 天前
gitea启用状态检查结合jenkins工作流实现pr门禁
servlet·jenkins·gitea
怒放de生命20103 天前
使用jenkins最新版操作指南
运维·servlet·jenkins
学网安的肆伍3 天前
【032-安全开发篇】JavaEE应用&Servlet路由技术&JDBC&Mybatis数据库&生命周期
安全·servlet·java-ee
芒克芒克3 天前
JavaWeb 文件上传全方案解析:从传统组件到现代框架实现
java·spring boot·spring·servlet·maven
q***16089 天前
报错The default superclass, “jakarta.servlet.http.HttpServlet“(已经配置好tomcat)
http·servlet·tomcat
Fantasydg10 天前
Servlet学习
学习·servlet