servlet的角色:
2、Servlet实现过程:
配置Servlet路径映射配置:
l由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用
l
l一个
<url-pattern>/demo/hello.htmlurl-pattern>
·
l同一个Servlet可以被映射到多个URL上,即多个
l在Servlet映射到的URL中也可以使用*通配符,但是只能有两种固定的格式:一种格式是“*.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾。
AnyName
<url-pattern>
*.do
url-pattern>
AnyName
<url-pattern>
/action/*
url-pattern>
(2)服务器将请求信息发送至 Servlet;
(3)Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
(4)服务器将响应返回给客户端。
Servlet的运行过程:
lServlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:
①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。
②装载并创建该Servlet的一个实例对象。
③调用Servlet实例对象的init()方法。
④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
⑤WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。
servlet类之间的关系:
3、Servlet可以完成以下任务:
(1)动态生成HTML文档。
(2)将请求转发给Servlet组件。
(3)读取客户端的Cookie,以及向客户端写入Cookie。
(4)访问服务器的资源,如数据库、 XML、文件对像等。
4、Servlet的特点:
(1)Servlet对像,由Servlet容器(Tomcat)创建。
(2)Servlet是一个接口:位于javax.servlet包中。
(3)service方法用于接收用户的请求并返回响应。
(4)用户访问时多次被执行(可以统计网站的访问量)。
2、javax.servlet Interface Servlet 中的method
3、Servlet接口、GenericServlet类、HttpServlet类三者之间的关系
servletCofig对象分析:
package cn.hncu;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class FirstServlet implements Servlet {
/**init方法*/
@Override
public void init(ServletConfig paramServletConfig) throws ServletException {
}
/**getServletConfig方法*/
@Override
public ServletConfig getServletConfig() {
return null;
}
/**service方法*/
@Override
public void service(ServletRequest paramServletRequest,
ServletResponse paramServletResponse) throws ServletException,
IOException {
}
/**getServletInfo方法*/
@Override
public String getServletInfo() {
return null;
}
/**destroy方法*/
@Override
public void destroy() {
}
}
2、Servlet的实现方式二(继承GenericServlet类):
package cn.hncu;
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**【注意】GenericServlet是抽象类,service是抽象方法*/
public class ExtendGenericServlet extends GenericServlet {
/**service方法*/
/**【注意】唯独service方法没有被实现,这个service方法我们自己使用*/
@Override
public void service(ServletRequest paramServletRequest,
ServletResponse paramServletResponse) throws ServletException,
IOException {
}
/**destroy方法*/
/**【注意】除过service方法之外,其他方法都已经被实现了,并且这些方法都调用父接口的方法*/
@Override
public void destroy() {
super.destroy();
}
/**getServletConfig方法*/
@Override
public ServletConfig getServletConfig() {
return super.getServletConfig();
}
/**getServletInfo方法*/
@Override
public String getServletInfo() {
return super.getServletInfo();
}
/**init方法*/
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
3、Servlet的实现方式三(继承HttpServlet类):
可以在dopost中调用doget,从而简化编程:
package cn.hncu;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ExtendHttpServlet extends HttpServlet {
/**service方法*/
/**【注意】此service方法是HttpServlet类 继承 GenericServlet类 后实现的其抽象service方法的*/
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.service(req, resp);
}
/**destroy方法*/
/**【注意】下面的这些方法全部是继承与GenericServlet类中的方法*/
@Override
public void destroy() {
super.destroy();
}
/**getServletConfig方法*/
@Override
public ServletConfig getServletConfig() {
return super.getServletConfig();
}
/**getServletInfo方法*/
@Override
public String getServletInfo() {
return super.getServletInfo();
}
(2)service方法:
每次请求都会访问此方法。
每次请求都会创建新的Request和Response对像。
(3)destory方法:
当服务器关闭时由容器调用并销毁。
2、JavaWeb项目—-TestServlet project
(1)、TestServlet框架:
(2)、index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
l如果在
举例:
org.apache.catalina.servlets.InvokerServlet
例如:为web应用写一个InitServlet,这个servlet配置为启动时装载,为整个web应用创建必要的数据库表和数据
l在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。
l当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。
l阅读ServletConfig API,并举例说明该对象的作用:
•获得配置文件,查看struts案例的web.xml文件
lWEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
lServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
l由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。
l查看ServletContext API文档,了解ServletContext对象的功能。
1.获取WEB应用的全局初始化参数
2.通过ServletContext对象实现数据共享
•案例--- 统计站点访问次数
3.利用ServletContext对象读取资源文件
l如果某个Servlet的映射路径仅仅为一个正斜杠(/),那么这个Servlet就成为当前Web应用程序的缺省Servlet。
l凡是在web.xml文件中找不到匹配的
l在
l当访问Tomcat服务器中的某个静态HTML文件和图片时,实际上是在访问这个缺省Servlet。