Servlet详解

来源:互联网 发布:新威胜电能表调试软件 编辑:程序博客网 时间:2024/06/18 03:55

详解Servlet

Servlet表示一个服务器应用,是J2EE标准的一部分,在Servlet中制定了java处理web的标准。

Servlet接口

既然Servlet是一套规范,那么肯定就会有他的接口。Servlet接口定义如下:

public interface Servlet {void init(ServletConfig var1) throws ServletException;ServletConfig getServletConfig();void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;String getServletInfo();void destroy();}

1.init()方法会在容器启动时被调用(load-on-startup大于0的时候)或者在调用Servlet的时候的时候初始化。

2.getServletConfig用于获取ServletConfig。

3.service用于统一处理请求。

4.getServletInfo方法可以获取一些Servlet相关的信息需要自己实现。

5.destory用于Servlet销毁的时候调用,只会调用一次。

对于ServletConfig接口源代码如下:

public interface ServletConfig {String getServletName();ServletContext getServletContext();String getInitParameter(String var1);Enumeration<Stsring> getInitParameterNames();}

1.getServletName()用于获取Servlet名字

2.getServletContext()用于获取Servlet上下文应用本身,在ServletCongtext里设置的参数可以被当前应用所有Servlet共享了。我们做项目的时候都知道参数可以保存在Session中,也可以保存在Application中,而后者很多时候就保存在了ServletCongtext中。

GenericServlet

GenericServlet是Servlet的默认实现,主要做了三件事:

1.实现了ServletConfig接口,我们可以直接调用ServletConfig里面的方法

2.提供了无参的init方法。

3.提供了log方法。

GenericServlet实现了ServletConfig接口,我们在需要调用ServletConfig中方法的时候可以直接调用,不再需要先获取ServletConfig了,比如,获取ServletContext的时候可以直接调用getServletContext。

public ServletContext getServletContext() {    ServletConfig sc = this.getServletConfig();    if(sc == null) {        throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));    } else {        return sc.getServletContext();    }}

GenericServlet实现了Servlet的init方法,在里面将config设置给了内部变量config,然后调用了无参的init()方法,这个方法是个模版方法,在子类中可以通过覆盖它来完成自己的初始化工作。

public void init(ServletConfig config) throws ServletException {    this.config = config;    this.init();}public void init() throws ServletException {}

这种做法三个作用:首先,将参数config设置给了内部属性config,这样就可以在ServletConfig的接口方法中直接调用config的相应方法来执行;其次,这么做之后我们再写Servlet的时候就可以只处理自己的初始化逻辑,不需要关心config了:还有一个作用就是在重写之后不需要再调用。

HttpServlet

HttpServlet是基于HTTP协议实现的Servlet的基类,写Servlet时直接继承它就可以了,不需要再从头实现Servlet接口。会根据不同的请求类型路由到不同的方法比如doGet,doPOST等。

0 0
原创粉丝点击