Servlet基础

本文介绍了Servlet基础,包括客户端与服务器交互流程,指出服务器是软件,以Tomcat为例说明访问方式。解释了Servlet是继承HttpServlet的Java类,阐述其生命周期,如默认首次调用加载、服务器关闭时销毁,还介绍了关键方法,如init、service、destory及doGet和doPost方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Servlet基础

1.首先聊一下客户端/浏览器和服务器交互的大致流程

第一步:客户端与服务器建立连接
第二步:客户端向服务器发出请求
第三步:服务器响应客户端的请求 
第四步:断开连接

2.服务器到底是什么?

平时我们生活中说到的服务器,可能更多的是指一个物理的硬件组成的机器,但其实服务器是一个软件

服务器作用:
客户端向服务器发出一个请求时,服务器会根据我们的请求,做出特定的响应所以,服务器就是一个容器,用来放置“怎样响应”的代码

服务器怎样工作:
首先,服务器被动提供服务;当客户端向服务器发送请求时,服务器根据请求调用服务器容器中的特定代码,然后响应给客户端。

用Tomcat服务器做个例子:
怎样访问某一个计算机上的Tomcat服务器?
只需要在浏览器输入URL http://主机ip:该主机中Tomcat的端口号/项目虚拟的地址/项目中的Servlet类
例如: http://localhost:8080/test/testServlet
localhost 主机ip(也可以写成127.0.0.1)表示本机
8080 :Tomcat服务器在本机的端口号 test :项目的虚拟路径 testServlet : test项目中的一个Servlet类的映射路径

输入上述的URL后,浏览器通过主机ip和端口号可以与服务器建立连接,ip地址可以定位一台计算机,端口号可以确定一台计算机上的应用。之后,向test项目的Servlet发送请求,说的更明白一点,就是告诉服务器执行这个Servlet类,然后将结果通过响应发送给客户端。

3.通过上面的解释,再解释下什么是Servlet

Servlet就是实现了继承了HttpServlet的Java类
HttpServlet中有一个service()方法,当有客户端请求某一个Servlet类的时候,服务器(容器)就会执行这个Servlet类的service()方法。

通过配置web.xml,用一个其它的名字映射到Servlet类(Servlet的部署),这个过程是必须的

<servlet>
    <servlet-name>映射名(桥梁)</servlet-name>
    <servlet-class>Servlet类名字</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>映射名(桥梁)</servlet-name>
    <url-pattern>/这里的名字可以映射到上面的Servlet类</url-pattern>
</servlet-mapping>

<servlet-name>相同,表示为一组;一组中的<url-pattern>可以映射到<servlet-class>

4.Servlet的生命周期(加载到内存-->销毁)

什么时候加载进入内存?

默认情况:第一次调用(请求)这个Servlet的时候

通过配置web.xml在服务器启动时加载

  <servlet>
    <servlet-name>...</servlet-name>
    <servlet-class>Serlet类名</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

<load-on-startup>1</load-on-startup>的数字表示加载顺序,如果有多个Servlet类在服务器启动时被加载,这个类会第一个加载。

什么时候销毁?

服务器关闭时

5.Servlet关键的方法

void init(); //初始化调用,在加载进内存时调用

void service(HttpServletRequest request, HttpServletResponse response); //Servlet被请求时,服务器调用该方法

void destory(); //Servlet销毁时调用,也就是说,关闭服务器时

接下来说一下doGet()和doPost()方法

重写这两个方法后,doGet()可以用来处理get请求,doPost()可以用来处理post请求。

问题:服务器不是调用service方法吗?怎么会执行doGet()和doPost()

这里利用了java的多态 看一下HttpServlet的部分源代码

 protected void service(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {

    String method = req.getMethod();

    if (method.equals(METHOD_GET)) {
        long lastModified = getLastModified(req);
        if (lastModified == -1) {
            // servlet doesn't support if-modified-since, no reason
            // to go through further expensive logic
            doGet(req, resp);
        } 
    ...
    ...

可以看到,通过HTTP请求可以得到请求方式,再通过不同的方式调用不同的方法。上面的代码表示如果是一个request请求,那么就调用doGet()方法

服务器只会调用service()方法,但是service()方法又会调用doGet()和doPost()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值