一、Servelt容器响应客户请求的过程
1.Web客户向Servlet容器发送HTTP request;
2.Servlet容器解析这个request;
3.Servlet容器创建一个HttpRequest对象,在这个对象中封装了HTTP请求信息;
4.Servlet容器创建一个HttpResponse对象;
5.Servlet容器调用HttpServlet 的service 方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;
6.HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;
7.HttpServlet调用HttpResponse的有关方法,生成响应数据;
8.Servlet容器把HttpServlet的响应结果传给Web客户。
二、Servelt的注册与运行
在一个web.xml文件中:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>AnyName</servlet-name>
<servlet-class>FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AnyName</servlet-name>
<url-pattern>/demo/web.html</url-pattern>
</servlet-mapping>
</web-app>
上面文件中包含了Servlet的注册和映射。
注册:
<servlet>
<servlet-name>AnyName</servlet-name>
<servlet-class>FirstServlet</servlet-class>
</servlet>
映射
<servlet-mapping>
<servlet-name>AnyName</servlet-name>
<url-pattern>/demo/web.html</url-pattern>
</servlet-mapping>
一个简单的servlet的程序:
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ServletTest extends HttpServlet
{
public void service(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body bgcolor=blue>");
out.println("<marquee behavior=alternate><font size=30 color=red>www.it315.org</font></marquee>");
out.println("<marquee>"+new java.util.Date()+"</marquee>");
out.println("</body>");
out.println("</html>");
}
}
将编译完成后的放置classes下
将整个WebContent文件复制到tomcat(此处用的是Tomcat6.0)下的webapps下。可以对其重命名,可以在浏览器地址栏访问hello.jsp,路径为http://localhost:8080每每访问该路径。
三.ServletContext接口
Web 应用中的所有 Servlet 共享同一个 ServletContext 对象,不同 Servlet 之间可以通过 ServletContext 对象实现数据通讯,因此 ServletContext 对象也被称为 Context 域对象。
获得 ServletContext 对象有以下 4 种方式:
//通过 GenericServlet的getServletContext方法获取ServletContext对象
ServletContext servletContext = this.getServletContext();
//通过 ServletConfig的 getServletContext方法获取ServletContext对象
ServletContext servletContext = this.getServletConfig().getServletContext();
//通过 HttpSession的 getServletContext方法获取ServletContext对象
ServletContext servletContext = req.getSession().getServletContext();
//通过 HttpServletRequest的 getServletContext方法获取ServletContext对象
ServletContext servletContext = req.getServletContext();