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 中的类,一个用户对象就是一个实体
申请和响应的过程
联合我所画的图阐明整个过程
假如浏览器发给服务器一个登录的申请,整个过程如下:
- 浏览器向服务器发送一个登录申请,服务器接管到申请之后,调用 handler 线程解决申请,handler 先解析申请,获取申请的资源名和申请携带的参数,之后将申请的资源名和申请携带的参数包装成 request 对象,并创立 response 对象,response 对象用来寄存响应回来的信息。最初将 request 和 response 发给 ServletController 类
- ServletController 类接管到之后,首先先从 request 对象中获取申请的资源名,判断是动态资源还是操作资源。因为登录是操作资源,所以 ServletController 会参考我的项目当中的配置文件,寻找有没有一个叫登录的操作,如果有的话会依据配置文件中登录操作对应的 Controller 类,并将申请交给这个 Controller 类。如果没有的话返回 404 状态码给浏览器,示意并没有这个操作资源
- 这个具体的 Controller 类是继承自 HttpServlet,HttpServlet 有一个 service 办法,controller 重写了这个办法。当 ServletController 将申请交给这个具体的 Controller 对象,这个对象会执行 service 办法,在 service 办法中调用 service 层的对象解决业务逻辑
- service 执行完之后将后果返回给 controller 对象,这个对象将失去的后果写回给浏览器
- 浏览器接管后将响应信息展现给用户
这就是大抵的一个流程,但并不是所有的申请响应过程都是截然不同,有的可能比较复杂,有的可能比较简单
Servlet 的应用
在下面提到的申请和响应的过程中,Servlet 就是 Controller 类,controller 继承了 Servlet 类。创立一个 Servlet 类,须要如下几步(这里我用的是 IDEA 编译器,应用的 Tomcat 容器)
- 创立一个类,继承 HttpServlet
- 重写 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 类");
}
}
- 配置文件,该配置文件是告知 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 对象的继承关系