转载

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中的类,一个用户对象就是一个实体

请求和响应的过程

结合我所画的图说明整个过程

Servlet的介绍与使用

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

  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的介绍与使用

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

原文  https://segmentfault.com/a/1190000023277960
正文到此结束
Loading...