乐趣区

关于servlet:Servlet的介绍与使用

Servlet 介绍

Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其余 HTTP 客户端的申请和 HTTP 服务器上的数据库或应用程序之间的中间层,上面所说的 web 服务器以 Tomcat 为例

MVC 架构介绍

理解申请和响应的过程能更好的了解 Servlet 做的事件。
这里咱们联合 MVC 架构进行形容,先介绍什么是 MVC

  • V 是 View 的简写,为视图层,就是用户可能看到的局部,比方浏览器的页面
  • C 是 Controller 的简写,为管制层,解决浏览器发送过去的申请,将申请交由模型层去解决,并将解决的最初后果返回给浏览器,中间层的含意。
  • M 是 Model 的简写,为模型层,模型层又能够细分三个局部

    • service:解决业务逻辑,比如说浏览器发送一个用户登录的申请,服务器接管到之后把它交由管制层去解决,管制层接管到之后交给 service,让 service 去解决用户登录的后果,判断用户的账号和明码是否正确
    • dao:数据长久层,用来读取和写入数据,联合下面提到的登录用例,当 service 要判断用户的账号和明码是否正确时,service 首先要从数据库中查找该账号和对应的明码。这时候 service 把查找这件事交由给 dao 去负责,dao 连贯数据库查找,将查找获取到的后果包装成 domain 实体返回给 service,service 再依据返回的后果进行判断
    • domain:用来示意实体局部,也就是 Java 中的类,一个用户对象就是一个实体

申请和响应的过程

联合我所画的图阐明整个过程

假如浏览器发给服务器一个登录的申请,整个过程如下:

  1. 浏览器向服务器发送一个登录申请,服务器接管到申请之后,调用 handler 线程解决申请,handler 先解析申请,获取申请的资源名和申请携带的参数,之后将申请的资源名和申请携带的参数包装成 request 对象,并创立 response 对象,response 对象用来寄存响应回来的信息。最初将 request 和 response 发给 ServletController 类
  2. ServletController 类接管到之后,首先先从 request 对象中获取申请的资源名,判断是动态资源还是操作资源。因为登录是操作资源,所以 ServletController 会参考我的项目当中的配置文件,寻找有没有一个叫登录的操作,如果有的话会依据配置文件中登录操作对应的 Controller 类,并将申请交给这个 Controller 类。如果没有的话返回 404 状态码给浏览器,示意并没有这个操作资源
  3. 这个具体的 Controller 类是继承自 HttpServlet,HttpServlet 有一个 service 办法,controller 重写了这个办法。当 ServletController 将申请交给这个具体的 Controller 对象,这个对象会执行 service 办法,在 service 办法中调用 service 层的对象解决业务逻辑
  4. service 执行完之后将后果返回给 controller 对象,这个对象将失去的后果写回给浏览器
  5. 浏览器接管后将响应信息展现给用户

这就是大抵的一个流程,但并不是所有的申请响应过程都是截然不同,有的可能比较复杂,有的可能比较简单

Servlet 的应用

在下面提到的申请和响应的过程中,Servlet 就是 Controller 类,controller 继承了 Servlet 类。创立一个 Servlet 类,须要如下几步(这里我用的是 IDEA 编译器,应用的 Tomcat 容器

  1. 创立一个类,继承 HttpServlet
  2. 重写 Service 办法,办法里带有两个参数 HttpServletRequest 和 HttpServletResponse,办法有两个异样 ServletException 和 IOException,办法是没有返回值的。代码如下:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class TestController extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("这是 Servlet 类");
    }
}
  1. 配置文件,该配置文件是告知 Tomcat 服务器有一个本人定义的类须要治理,在我的项目下的 web 文件夹下的 WEB-INFO 文件夹中的 web.xml 文件,配置信息如下:
    <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>TestController</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>

url-pattern 是申请的操作名,servlet-name 是申请操作名对应的名字,servlet-class 是 servlet-name 对应的 Servlet 类。

运行

启动 Tomcat 服务器,关上浏览器输出 URL 地址 + 申请的操作名,如下:http://localhost:8080/untitled_war_exploded/test
在控制台就能看到 TestController 执行了,输入信息如下:

本篇文章就到此结束,下篇文章将介绍 Servlet 对象的继承关系

退出移动版