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对象的继承关系
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。