什么是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
<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
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 初始化");
}
@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 结束");
}
}
HelloServlet.java
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**