Servlet
servlet applet:运行在服务器端的小程序
- servlet 其实就是一个接口,定义了java类被浏览器访问到的规则。
- Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
1、编写一个Java类,实现servlet接口。
2、把开发好的Java类部署到web服务器中。 - Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用“请求/响应”的模式。
Servlet可完成如下功能:
1、创建并返回基于客户请求的动态HTML页面。
2、创建可嵌入到现有HTML 页面中的部分HTML 页面(HTML 片段)。
3、与其它服务器资源(如数据库或基于Java的应用程序)进行通信
Servlet容器响应客户请求的过程:
实现Servlet有三种方式:
实现javax.servlet.Servlet接口;
继承javax.servlet.GenericServlet类;
继承javax.servlet.http.HttpServlet类;
完成Servlet需要分为两步:
1、编写Servlet类;
2、在web.xml文件中配置Servlet;
创建第一个servlet程序:HelloServlet.java
public class HelloServlet implements Servlet {
public HelloServlet(){
System.out.println("HelloServlet construct....");
}
@Override
public void destroy() {
System.out.println("destroy....");
}
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig....");
return null;
}
@Override
public String getServletInfo() {
System.out.println("getServletInfo....");
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
System.out.println("init....");
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
System.out.println("service....");
}
}
在web.xml中配置和映射servlet
<!-- 配置和映射servlet -->
<servlet>
<!-- servlet注册名 -->
<servlet-name>helloServlet</servlet-name>
<!-- servlet的全类名 -->
<servlet-class>org.lanqiao.javaweb.servlet.test.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 需要和关联的servlet节点的servlet-name子节点的内容一致 -->
<servlet-name>helloServlet</servlet-name>
<!-- 映射的具体的访问路径:/代表当前WEB应用的根目录 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>:指定HelloServlet这个Servlet的名称为hello;
<servlet-mapping>:指定/hello访问路径所以访问的Servlet名为hello。
servlet生命周期
1、 构造器:只被调用一次。当第一次请求Servlet时,创建Servlet的实例,调用构造器。说明Servlet是单实例的。
2、 init:只被调用一次,在创建好实例后立即被调用,用于初始化当前Servlet
3、 Service:被多次调用,每次请求都会调用service方法,实际用于相应请求
4 、destroy:Servlet是不会轻易离去的,通常都是在服务器关闭时Servlet才会离去!在服务器被关闭时,服务器会去销毁Servlet,在销毁Servlet之前服务器会先去调用Servlet的destroy()方法
测试生命周期方法
public class HelloServlet implements Servlet {
public void init(ServletConfig config) throws ServletException {
System.out.println("Servlet诞生了!");
}
public ServletConfig getServletConfig() {return null;}
public void destroy() {
System.out.println("Servlet离我们而去了!");
}
public String getServletInfo() {return null;}
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
System.out.println("hello i'am servlet!");
}
}