Servlet基础概要一Servlet简介1.Server+let意为:运行在服务器端的小程序。Servlet实际上就是一个接口。狭义上的Servlet,指的就是Servlet接口广义上的我们认为凡是实现Servlet接口的类,我们都称他是一个Servlet*****2.Servlet的作用:1.接收用户发送的请求2.调用其他的java程序来处理请求3.根据处理结果,返回给用户一个页面二servlet解析客户端http请求流程图:1.web客户向Servlet容器发出HTTP请求;2.Servlet容器解析web的HTTP请求.3.Servlet容器创建一个HttpRequest对象,在这个对象中封装了http请求信息;4.Servlet容器创建一个HttpResponse对象;5.Servlet容器(如果访问的该servlet不是在服务器启动时创建的,则先创建servlet实例并调用init()方法初始化对象)调用HttpServlet的service()方法,把HttpRequest和HttpResponse对象为service方法的参数传给HttpServlet对象;6.HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;7.HttpServlet调用HttpResponse的有关方法,生成响应数据;8.Servlet容器把HttpServlet的响应结果传给web客户.三servlet执行流程四servlet家族图谱ServletAPI的核心就是javax.servlet.Servlet接口,所有的Servlet类(抽象的或者自己写的)都必须实现这个接口。在Servlet接口中定义了5个方法,其中有3个方法是由Servlet容器在Servlet的生命周期的不同阶段来调用的特定方法。1.javax.servlet.servlet接口packagejavax.servlet;importjava.io.IOException;publicinterfaceServlet{//负责初始化Servlet对象。容器一旦创建好Servlet对象后,就调用此方法来初始化Servlet对象publicvoidinit(ServletConfigconfig)throwsServletException;//方法负责响应客户的请求,提供服务。当容器接收到客户端要求访问特定的servlet请求时,就会调用Servlet的service方法publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,IOException;//Destroy()方法负责释放Servlet对象占用的资源,当servlet对象结束生命周期时,servlet容器调用此方法来销毁servlet对象.publicvoiddestroy();//说明:Init(),service(),destroy()这三个方法是Servlet生命周期中的最重要的三个方法。//返回一个字符串,在该字符串中包含servlet的创建者,版本和版权等信息publicStringgetServletInfo();//GetServletConfig:返回一个ServletConfig对象,该对象中包含了Servlet初始化参数信息publicServletConfiggetServletConfig();}GenericServlet抽象类实现了Servlet接口,它只是通用的实现,与任何网络应用层协议无关。同时,HttpServlet这个抽象类继承了GenericServlet抽象类,在Http协议上提供了通用的实现。2ServletConfig代表当前Servlet的配置信息,每一个Servlet都有其唯一对应的ServletConfig。servletservlet-nameAServlet/servlet-nameservlet-classcom.atguigu.servlet.AServlet/servlet-classinit-paramparam-nameuser/param-nameparam-valueroot/param-value/init-paraminit-paramparam-namepassword/param-nameparam-value123123/param-value/init-param/servlet获取:由Tomcat服务器创建,最终作为参数传递到init()方法中,我们可以在init()方法直接使用。当我们通过继承HttpServlet创建Servlet时,由于父类已经实现ServletConfig接口,所以我们可以在Servlet中直接调用ServletConfig的方法。功能:【1】获取Servlet的别名【2】获取当前Servlet的初始化参数。init-paramparam-nameuser/param-nameparam-valueroot/param-value/init-paraminit-paramparam-namepassword/param-nameparam-value123123/param-value/init-param【3】获取当前WEB应用的ServletContext对象。②ServletContext代表:当前的WEB应用,一个WEB应用对应一个唯一的ServletContext对象,ServletContext对象在项目启动时创建,在项目卸载时销毁。获取:通过ServletConfig的getServletContext()方法获取。功能:【1】可以获取整个WEB应用的初始化参数context-paramparam-namephone/param-nameparam-value1388888888/param-value/context-param【2】可以获取资源的真实路径(物理路径),主要在文件的上传和下载时使用。【3】可以作为一个域对象在不同的web资源之间共享数据。3.GenericServlet代码packagejavax.servlet;importjava.io.IOException;importjava.util.Enumeration;//抽象类GenericServlet实现了Servlet接口的同时,也实现了ServletConfig接口和Serializable这两个接口publicabstractclassGenericServletimplementsServlet,ServletConfig,java.io.Serializable{//私有变量,保存init()传入的ServletConfig对象的引用privatetransientServletConfigconfig;//无参的构造方法publicGenericServlet(){}------------------------------------以下方法实现了servlet接口中的5个方法实现Servlet接口方法开始------------------------------------/*实现接口Servlet中的带参数的init(ServletConfigConfig)方法,将传递的ServletConfig对象的引用保存到私有成员变量中,使得GenericServlet对象和一个ServletConfig对象关联.同时它也调用了自身的不带参数的init()方法**/publicvoidinit(ServletConfigconfig)throwsServletException{this.config=config;this.init();//调用了无参的init()方法}//无参的init()方法publicvoidinit()throwsServletException{}//空实现了destroy方法publicvoiddestroy(){}//实现了接口中的getServletConfig方法,返回ServletConfig对象publicServletConfiggetServletConfig(){returnconfig;}//该方法实现接口Servlet中的ServletInfo,默认返回空字符串publicStringgetServletInfo(){return;}//唯一没有实现的抽象方法service(),仅仅在此声明。交由子类去实现具体的应用//在后来的HttpServlet抽象类中,针对当前基于Http协议的Web开发,HttpServlet抽象类具体实现了这个方法//若有其他的协议,直接继承本类后实现相关协议即可,具有很强的扩展性publicabstractvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,IOException;------------------------------------实现Servlet接口方法结束---------------------------------------------------------------------------------以下四个方法实现了接口ServletConfig中的方法实现ServletConfig接口开始---------------------------------------------//该方法实现了接口ServletConfig中的getServletContext方法,用于返回servleConfig对象中所包含的servletContext方法publicServletContextgetServletContext(){returngetServletConfig().getServletContext();}//获取初始化参数publicStringgetInitParameter(Stringname){returngetServletConfig().getInitParameter(name);}//实现了接口ServletConfig中的方法,用于返回在web.xml文件中为servlet所配置的全部的初始化参数的值publicEnumerationgetInitParameterNames(){returngetServletConfig().getInitParameterNames();//获取在web.xml文件中注册的当前的这个servlet名称。没有在web.xml中注册的servlet,该方法直接放回该servlet的类名。//法实现了接口ServleConfig中的getServletName方法publicStringgetServletName(){returnconfig.getServletName();}---------------------------------------------实现ServletConfig接口结束---------------------------------------------publicvoidlog(Stringmsg){getServletContext().log(getServletName()+:+msg);}publicvoidlog(Stringmessage,Throwablet){getServletContext().log(getServletName()+:+message,t);}}4HttpServlet是继承了GenericServlet抽象类的一个抽象类,但是他的里面并没有任何抽象