servlet我们可以从英文看出来,全名server applet,服务端的一个小程序。我们一般将servelt分为两方面,一种是狭义上的servlet,另一种就是广义上的servelt。
狭义上的servlet:其实就是java中定义好的一个接口。
广义上的servelet:是实现servlet的类。
我们可以通过自己写一个servlet来证明。
①狭义上的servelt
实现Servlet接口,里面有一个周期,初始化只会一开始执行一次,销毁是在最后执行一次(tomcat关闭或者内存正好回收),重要的是service方法。
- @WebServlet("/myServlet")
- public class MyServlet implements Servlet{
-
- @Override
- public void destroy() { //销毁
-
- }
-
- @Override
- public ServletConfig getServletConfig() { //servlet上下文,一个容器
- return null;
- }
-
- @Override
- public String getServletInfo() { //获得是基本信息,字符串格式
- return null;
- }
-
- @Override
- public void init(ServletConfig arg0) throws ServletException {//初始化
-
- }
-
- @Override
- public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
-
- }
-
- }
简单说一下@WebServelt:
我们通常的写法是@WebServlet("/myServlet") ,这是一个简化写法。其中完整写法是 @WebServlet(urlPatterns= {"/myServlet","/my"},name="sdf") ,而简化写法相当于@WebServlet(value = "/myServlet"),这个必须是只有一个属性,例如只有value,并且value中只有一个值的时候就可以省略 。但是比如我们定义一个loadOnStartup(loadOnStartup的意思就是tomcat加载的时候就已经初始化了,不需要等到第一次访问的时候才进行初始化)。@WebServlet(value="/myServlet",loadOnStartup=1) ,value就不可以省略,因为他有两个属性值。
- <servlet>
- <servlet-name>MyServeltservlet-name>
- <servlet-class>com.servlet.MyServeltservlet-class>
- <load-on-startup>1load-on-startup>
-
- servlet>
- <servlet-mapping>
- <servlet-name>MyServeltservlet-name>
- <url-pattern>/myServleturl-pattern>
- servlet-mapping>
②广义上的servlet
我们根据这张图进行分析。
作为一把手肯定就是servlet接口了,所有的都是以这个为基础向下延伸简化的。
1.二把手 GenericServlet,其他方法都做了,只留一个service方法,如果想要用到初始化或其他方法,就只能换为原先接口servlet。
深入源码看一下,它是一个抽象类,实现了servlet接口。
GenericServlet中只是实现了重要的service方法,比servlet简化了许多。
- @WebServlet(value="/myServlet",loadOnStartup=1)
- public class MyServletClass extends GenericServlet{
-
- @Override
- public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
- // TODO Auto-generated method stub
-
- }
-
-
- }
2.三把手HttpServlet,这才是我们比较常用的,他的意思是将请求方式分类,匹配http请求,将service拆分成多个按照请求方式的方法(将主要方法service分成一个个的小方法)。常用的doGet,doPost方法。HttpServlet类不用实现任何方法,更加简单,方便。
- @WebServlet(value="/myServlet",loadOnStartup=1)
- public class MyServletHttp extends HttpServlet{
-
-
-
-
- }