ServletAPI中的主要接口或类的核心类图(很重要)
一、Servlet定义
Servlet是使用Java Servlet应用程序设计接口及相关类和方法的Java程序。它在Web服务器上或应用服务器上运行并扩展了该服务器的能力。Java Servlet对于Web服务器就好像Java Applet对于Web浏览器。Applet装入Web浏览器并在Web浏览器内执行,而Servlet则是装入Web服务器并在Web服务器内执行。 Java Servlet API 定义了Servlet和服务器之间的一个标准接口,这使得Servlet具有跨服务器平台的特性。
Servlet通过创建一个框架扩展服务器的能力,采用请求-响应模式提供Web服务。当客户机发送请求至服务器时,服务器将请求信息发送给Servlet,Servlet生成响应内容并将其传给Server,然后再由Server将响应返回给客户端。
二、Servlet概述
1、Servlet是SUN公司制定的一套开发动态网页的技术。
2、JavaEE相关的类,包名一般都是以javax开头
图解:
三、Servlet的生命周期
当客户端服务器向进行请求的时候tomcate中的容器最终要调用service方法为客户进行服务,并且向客户端网页进行回应。
1、Servlet接口中的常用方法:
public void init(ServletConfig config):初始化。Servlet类被实例化后就执行,且执行一次。由容器进行 调用。
public void service() 作用是用来处理请求的
public void destroy():销毁Servlet对象。由容器进行调用在内存中一个Servlet只有一个实例。针对不同 的用户请求,容器采用多线程的机制调用service方法的。
Servlet实例对象和初始化方法,默认情况下,只有第一次访问时才执行,且只执行一次。
四、servlet运行过程
用户的所有请求都是找servlet
整个过程可以这样简略:
(1)web请求
(2) tomcate服务器调用servlet组件
(3)web项目下的xml文件中的<servlet-mapping>标签中的url-pattern地址
(4)然后再找到该标签中的servlet-name,从而找到<servlet>标签中的servlet-name,然后找到servlet类进行处理。
(5)然后通过servier的处理得到响应,通过服务器响应到web。
图文介绍:
举一个例子代码:
一个标准的web-servlet应用目录:
注:可以直接建立一个servlet类:直接new一个servlet类,勾选dopost及doget方法(没有指明走那个方法,默认执行该方法),最后下一步,勾选Generate/Map web.xml(将该servlet类映射到xml文件中。)
HttpServlet 中的service方法是典型的模板设计模式的具体应用。
package com.dp.java.Servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletDom2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.flush();
out.close();
}
}
package com.dp.java.Servlet;
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class ServletDom1 extends GenericServlet {
@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
response.getOutputStream().write("haha".getBytes());
}
}
映射:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<servlet>
<servlet-name>ServletDom1</servlet-name>
<servlet-class>com.dp.java.Servlet.ServletDom1</servlet-class>
</servlet>
<servlet>
<servlet-name>ServletDom2</servlet-name>
<servlet-class>com.dp.java.Servlet.ServletDom2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDom1</servlet-name>
<url-pattern>/ServletDom1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletDom2</servlet-name>
<url-pattern>/servlet/ServletDom2</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
注:<welcome-file-list>指默认走的页面
五、web.xml文件的映射的细节问题
、
当 <url-pattern>/</url-pattern>出现时,servlet将会成为这个应用程序的缺省servlet,在tomcat work space\apache-tomcat-6.0.24\conf中可以找到web.xml中可以找到设置的缺省。
如下图tomcate中web.xml文件:
最后值得一提的是:
servlet3.0之后,新建web应用就不会出现web.xml文件了,这里是新特性介绍:http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/#major3