1.什么是Servlet
servlet是Java Web的三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:
*接收请求数据;
*处理请求数据;
*完成响应。
例如客户端发出登录请求,或者输出注册请求,这些请求都应该由Servlet来完成处理!Servlet需要我们自己来编写,每个Servlet必须实现javax.servlet.Servlet接口。
2.实现Servlet的方式(由我们自己来写!)
实现Servlet有三种方式:
*实现javax.servlet.Servlet接口;
*继承javax.servlet.GenericServlet类;
*继承javax.servlet.http.HttpServlet类;
通常我们会继承HttpServlet类来完成我们的Servlet,但学习Servlet还要从javax.servlet.Servlet接口开始学习。
Servlet.java---五个方法
1 public interface Servlet{ 2 public void init(ServletConfig config)throws ServletException; 3 4 public ServletConfig getServletConfig(); 5 6 public void service(ServletRequest req,ServletResponse res) 7 throws ServletException,IOException; 8 9 public String getServletInfo(); 10 11 public void destroy(); 12 }
批注:Servlet中的方法大多数不由我们来调用,而是由Tomcat来调用。并且Servlet的对象也不由我们来创建,由Tomcat来创建!
自己写的Servlet源码
1 package one.servlet; 2 3 import java.io.IOException; 4 5 import javax.servlet.Servlet; 6 import javax.servlet.ServletConfig; 7 import javax.servlet.ServletException; 8 import javax.servlet.ServletRequest; 9 import javax.servlet.ServletResponse; 10 11 public class AServlet implements Servlet { 12 13 /* 14 * 它是生命周期方法--由Tomcat来调用 15 * 它会在Servlet被销毁之前调用,并且它只会被调用一次! 16 * */ 17 @Override 18 public void destroy() { 19 System.out.println("destory()..."); 20 } 21 22 /* 23 * 可以获取Servlet的配置信息 24 * */ 25 @Override 26 public ServletConfig getServletConfig() { 27 System.out.println("getServletConfig()..."); 28 return null; 29 } 30 31 /*获取Servlet的信息*/ 32 @Override 33 public String getServletInfo() { 34 System.out.println("getServletInfo()..."); 35 return null; 36 } 37 /* 38 * 它是生命周期方法--由Tomcat来调用 39 * 它会在Servlet对象创建之后马上执行,并只执行一次! 40 * 41 * 42 * */ 43 @Override 44 public void init(ServletConfig servletConfig) throws ServletException { 45 //第一个被Tomcat调用,然后会给它传参数ServletConfig 46 System.out.println("init()..."); 47 } 48 49 /* 50 * 它是生命周期方法--由Tomcat来调用 51 * 它会被调用多次!! 52 * 每次处理请求都是在调用这个方法! 53 * */ 54 @Override 55 public void service(ServletRequest servletRequest, ServletResponse servletResponse) 56 throws ServletException, IOException { 57 System.out.println("service()..."); 58 } 59 60 }
浏览器访问Servlet:
1.给Servlet指定一个Servlet路径!(让Servlet与一个路径绑定在一起)
2.浏览器访问Servlet路径
给Servlet配置Servlet路径!
这需要在web.xml中对Servlet进行配置
web.xml <servlet> <servlet-name>XXX</servlet-name>//随便写 <servlet-class>com.one.Aservlet</servlet-class>//Servlet的全路径 </servlet> <servlet-mapping>//mapping的英语意思:映射 <servlet-name>XXX</servlet-name>//跟上面的名字一样 <url-pattern>/xx.servlet</url-pattern>//必须以 “/” 开头,后面可以随便写,但是可以没有扩展名,或直接写 “/AServlet” </servlet-mapping>
原理图:
配置Servlet的路径
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 5 id="WebApp_ID" version="3.0"> 6 7 <servlet> 8 <servlet-name>xxx</servlet-name> 9 <servlet-class>one.servlet.AServlet</servlet-class> 10 </servlet> 11 12 <servlet-mapping> 13 <servlet-name>xxx</servlet-name> 14 <url-pattern>/AServlet</url-pattern><!-- url的模式,即以什么样来访问,最终浏览器访问 --> 15 </servlet-mapping> 16 17 </web-app>
http://localhost:8080/XJS_Servlet1/Aservlet请求两次后控制台的结果:
说明init()方法只在第一次请求时调用,也就是服务器给创建了它的对象
当关闭服务器时,会执行destroy()方法(通俗地讲,就是servlet在第一次请求时生,在服务器关闭时死),且该servlet是单例的,只有一个对象。
总结:
生命周期方法:
*void init(ServletConfig):出生之后(1次);
*void service(ServletRequest request,ServletResponse response):每次处理请求时都会
被调用
*void destroy():临死之前(1次);
特性:
*单例,一个类只有一个对象;当然可能存在多个Servlet类!
*线程不安全的,所以它的效率是高的!
Servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用相应的方法。