一、什么是Servlet?
servlet是运行在 Web 服务器中的小型 Java 程序(即:服务器端的小应用程序)。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。
二、Servlet的创建方式
实现javax.servlet.Servlet接口
public class ServletDemo1 implements Servlet { public ServletDemo1() { System.out.println("servlet构造方法"); } @Override public void init(ServletConfig arg0) throws ServletException { System.out.println("servlet被初始化..."); } @Override public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { System.out.println("service被执行!"); } @Override public void destroy() { System.out.println("destory()函数"); } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } }
继承javax.servet.GenericServlet类(适配器模式)
public class ServletDemo2 extends GenericServlet{ private static final long serialVersionUID = 4819565559437692117L; @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { System.out.println("Hello Servlet!"); } }
继承javax.servlet.http.HttpServlet类(模版设计模式)(最常用)
public class ServletDemo3 extends HttpServlet { private static final long serialVersionUID = -801956896785489625L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("**********doGet()********"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("**********doPost()********"); } }
web.xml文件如下:<servlet> <servlet-name>servletDemo1</servlet-name> <servlet-class>com.lzj.serlvet.ServletDemo1</servlet-class> <load-on-startup>2</load-on-startup> <!--在启动Tomcat时创建该servlet--> </servlet> <servlet-mapping> <servlet-name>servletDemo1</servlet-name> <url-pattern>/demo1</url-pattern> </servlet-mapping> <servlet>
三、Servlet的执行方式
首先从客户端发送http请求(http://localhost:8080/day08/demo1),该请求到达服务器时,服务器首先根据url中的day08找到在tomcat中运行的day08这个应用,然后再根据demo1在该应用中扫描web.xml,找到<url-pattern>对应的servlet名称,之后由兄弟节点根据servlet的名称找到servlet的类。找到该servlet后,若是servlet有jdbc的操作,会首先载入lib下的类和tomcat/lib中的所有的jar,之后执行构造方法进行实例化,执行init()方法进行初始化,调用service()方法,进行服务,当应用卸载时或关闭服务器时会调用destroy()方法。
还有在调用service方法后,request和response将面临销毁。
下面用一张图来表示上述过程:
四、Servlet的生命周期
实例化-->初始化-->服务-->销毁
出生:(实例化-->初始化)第一次访问Servlet就出生(默认情况下)。
活着:(服务)应用活着,servlet就活着。
死亡:(销毁)应用卸载了servlet就销毁。
五、ServletConfig
获取servlet的配置信息
<servlet> <servlet-name>servletConfigDemo</servlet-name> <servlet-class>com.itheima.serlvetConfig.ServletConfigDemo</servlet-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </servlet>
public class ServletConfigDemo extends HttpServlet { //第一种获取方式 //private ServletConfig config; /*@Override public void init(ServletConfig config) throws ServletException { this.config = config; }*/ private static final long serialVersionUID = -3056032161082463104L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { /*String encoding = config.getInitParameter("encoding");//获得配置文件中的信息的 System.out.println(encoding);*/ //第二种方式 String encoding2 = this.getServletConfig().getInitParameter("encoding"); System.out.println(encoding2); //第三种方式 System.out.println(this.getInitParameter("encoding")); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
六、ServletContext
ServletContext: 代表的是整个应用。一个应用只有一个ServletContext对象。单实例。
作用:
1、域对象,使多个servlet共享数据
常用方法:
void setAttribute(String name,object value);//向ServletContext对象的map中添加数据
Object getAttribute(String name);//从ServletContext对象的map中取数据
2、获取全局的配置信息
String getInitParameter(String name) 根据配置文件中的key得到value<context-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </contexe-param>
3、获取资源的路径
String getRealPath(String path);//根据资源名称得到资源的绝对路径.
可以得到当前应用任何位置的任何资源。
关于servlet的内容就写这么多,上述如有不正确的地方,还望各位指出。
servlet的相关要点
最新推荐文章于 2024-07-10 21:37:49 发布