Servlet的作用
Servlet主要是为了衔接web应用的前端和后端的,作为它们俩中间数据交换的桥梁,现在很多web项目都是前后端分离的,前端写前端的后端写后端的,但是他俩所用的编程语言是有区别的,怎么实现它们之间的数据交换呢?Servlet就是为了解决这个,它是用java编写的,目前我是在tomcat上面使用它,其他环境还没试过
需要注意的是它并不在jdk中,有专门的Servlet代码包,需要将它导入项目中才可以用,不过如果我们在tomcat环境下运行是不需要导入的,tomcat本身自带servlet的jar包
需要对应jar包的话可以到下面的链接去下载
https://mvnrepository.com/search?q=Servlet
Servlet接口源代码
public interface Servlet {
//初始化函数
void init(ServletConfig var1) throws ServletException;
//存储配置信息
ServletConfig getServletConfig();
//处理请求
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
//获取当前Servlet的一些信息
String getServletInfo();
//释放内存
void destroy();
}
在最底层他被定位为一个接口,其中的service函数就是用来处理http请求的,如果我们要处理页面的请求就可以在这里面写业务代码
Servlet接口实现类图
他只被定义为接口,所以就会有相应的实现类,以下是servlet.jar包中提供的实现类的结构图
为了方便开发,其中定义的HttpServlet类编写了很多函数,并且将接口中的类都实现了,我们使用时只需要继承它然后重写service方法即可,一般来说我们都是通过继承HttpServlet类重写它的方法来处理前端的数据请求
Tomcat下web页面请求的处理逻辑
在HttpService处理逻辑中,当网页发送请求,例如向服务器发送一个get请求,tomcat会自动调用HttpService中的service方法去处理,service中会根据不同的请求格式 例如get请求就调用 上图中的doget方法,post请求就会调用dopost方法,
HttpService实现类中业务代码的写法
1.重写父类service方法
这样的话,当服务器接收到请求就会调用service进行处理,不过由于不同格式的请求处理的业务代码可能不同,针对不同的请求我们需要编写不同的代码,全部在这一个方法中编写显得过于臃肿,实现的功能过多
public class servlet02 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("调用02");
}
}
2.重写父类对应的do方法
根据父类的处理逻辑,我们直接重写父类中对应的do..方法即可,因为父类中的处理就是根据消息的不同调用不同的do方法
public class servlet02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost");
}
}
配置Servlet的映射路径
每个 Servlet 在 Web 应用中都需要有一个唯一的访问路径,以便客户端(通常是浏览器)能够准确地找到并访问该 Servlet。如果没有明确的映射路径,客户端就不知道通过什么 URL 来调用这个特定的 Servlet
例如有以下实现类,现在演示如何为他配置url
public class servlet02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
}
}
1.在web.xml中配置
<servlet>
//为该类取的昵称,一般和它同名即可
<servlet-name>servlet02</servlet-name>
//对应的实现类的类名(包括包名)
<servlet-class>servlet02</servlet-class>
</servlet>
//设置类与url的映射
<servlet-mapping>
//对应的昵称
<servlet-name>servlet02</servlet-name>
//设置的url标志,浏览器可以根据这个url来访问
<url-pattern>/servlet02</url-pattern>
</servlet-mapping>
先给对应类起一个别名,然后将别名和要设置的url放到servlet-mapping中作为一个映射、
2.使用注解
@WebServlet("/servlet02")
public class servlet02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
}
}
直接在类定义上面添加即可,这种方式很简单,当然注解中还有一些其他的信息可以配置,这里只展示了最简单的配置url的方式,如果还要在注解中配置其他信息就不可以这样写了
做完以上操作就可以在tomcat中运行了,当然service中的处理代码因业务而异
Servlet生命周期
以下都是在Servlet接口中定义的方法
1.加载和初始化(init)
当服务器启动或客户端首次请求 Servlet 时,Web 容器会查找 Servlet 类文件,并使用类加载器将其加载到内存中。然后,Web 容器创建 Servlet 类的实例
在实例化之后,Web 容器会调用 Servlet 的 init 方法来进行初始化操作。在init 方法中,可以进行一些一次性的初始化工作,如读取配置文件、建立数据库连接等。
init 方法只会在 Servlet 生命周期中被调用一次
2.服务(service)
当客户端发送请求到服务器时,Web 容器会调用 Servlet 的 service 方法来处理请求。
service方法会根据请求的类型(GET、POST 等),调用相应的doGet、doPost 等方法来具体处理请求,并生成响应。
service方法在 Servlet 的生命周期中可能会被多次调用,每次处理一个客户端请求。
3.销毁(destroy)
当服务器关闭或 Web 应用被卸载时,Web 容器会调用 Servlet 的 destroy 方法。
在 destroy方法中,可以进行一些清理资源的操作,如关闭数据库连接、释放占用的内存等。
destroy 方法在 Servlet 的生命周期中也只会被调用一次。
总结
以上是我在这段时间所学,如果有不足及错误之处还请指正,如果觉得总结的还可以希望送上一个点赞支持
标签:调用,请求,service,方法,笔记,理解,servlet02,Servlet From: https://blog.csdn.net/weixin_74141526/article/details/143374129