什么是 Servlet
我们在网上浏览网页,需要一个 web 服务器,浏览网页的过程就是浏览器通过 HTTP 协议与 WEB 服务器 交互的过程。
在过去,大多是静态网页,因此只须把资源放在 WEB 服务器上即可。如今随着应用的发展,客户与服务器需要动态的交互,为了实现这一目标,就需 要开发一个遵循 HTTP 协议的服务器端应用软件,来处理各种请求。
那么 servlet 是一个基于 java 技术的 WEB 组件,运行在服务器端,我们利用 sevlet 可以很轻松的扩展 WEB 服务器的功能,使它满足特定的应用需要。
servlet 由 servlet 容器管理,servlet 容器也叫 servlet 引擎,是 servlet 的运行环境,给发送的请求和响应之上提供网络服务。比如 tomcat 就是我们常用的一个 servlet 容器,其接受 客户端并做出响应的步骤如下:
客户端发送请求至服务器端;
服务器将请求信息发送至 Servlet;
Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
服务器将响应返回给客户端。
最简单的 Servlet 结构

servlet-api.jar
运行 Servlet 服务的基础包

web.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <web-app> <!-- filters --> <filter> <filter-name>helloFilter</filter-name> <filter-class>demo.HelloFilter</filter-class> </filter>
<filter-mapping> <filter-name>helloFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- servlets --> <servlet> <servlet-name>hello_world</servlet-name> <servlet-class>demo.HelloServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
<servlet-mapping> <servlet-name>hello_world</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
|
HelloFilter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| package demo;
import java.io.IOException;
import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest;
public class HelloFilter implements Filter {
@Override public void init(FilterConfig arg0) throws ServletException { System.out.println("Filter 初始化 & quot;); }
@Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req; System.out.println(" 拦截 URI=" + request.getRequestURI()); chain.doFilter(req, res);
}
@Override public void destroy() { System.out.println("Filter 结束 & quot;); } }
|
HelloServlet.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package demo;
import java.io.IOException;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.getWriter().println("Hello World! reqUrl=" + req.getRequestURI()); }
}
|
运行结果

……… 省略
Filter 初始化 **
三月 19, 2015 11:43:35 上午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler [“http-nio-8080”]
三月 19, 2015 11:43:35 上午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler [“ajp-nio-8009”]
三月 19, 2015 11:43:35 上午 org.apache.catalina.startup.Catalina start
信息: Server startup in 1458 ms
** 拦截 URI=/corning.test.servlet_basic/
拦截 URI=/corning.test.servlet_basic/hello