Hello Word

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

生命周期方法:

 void init(ServletConfig):出生之后(1次);

 void service(ServletRequest request, ServletResponse response):每次处理请求时都会被调用;

 void destroy():临死之前(1次);

 

特性:

 

单例,一个类只有一个对象;当然可能存在多个Servlet类!

 

线程不安全的,所以它的效率是高的!

Servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用相应的方法!!!

1、 什么是servlet?

 ServletJavaWeb三大组件之一,它属于动态资源。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     public ServletConfig getServletConfig();
4     public void service(ServletRequest req, ServletResponse res)
5             throws ServletException, IOException;
6     public String getServletInfo();
7     public void destroy();
8 }
9 //[Servlet中的方法大多数不由我们来调用,而是由Tomcat来调用。并且Servlet的对象也不由我们来创建,由Tomcat来创建!]

HelloServlet.java,继承 Servlet.java.

 1 public class HelloServlet implements Servlet {
 2     public void init(ServletConfig config) throws ServletException {}
 3 
 4     public ServletConfig getServletConfig() {return null;}
 5 
 6     public void destroy() {}
 7 
 8     public String getServletInfo() {return null;}
 9 
10     public void service(ServletRequest req, ServletResponse res)
11             throws ServletException, IOException {
12         System.out.println("hello servlet!");
13     }
14 }

配置web.xml

web.xml中配置Servlet的目的其实只有一个,就是把访问路径与一个Servlet绑定到一起,下面配置是把访问路径:“/helloworld”与“cn.servlet.HelloServlet”绑定到一起。

*<servlet>:指定HelloServlet这个Servlet的名称为hello

* <servlet-mapping>:指定/helloworld访问路径所以访问的Servlet名为hello

*<servlet><servlet-mapping>通过<servlet-name>这个元素关联在一起了!

*接下来,我们编译HelloServlet,注意,编译HelloServlet时需要导入servlet-api.jar,因为Servlet.class等类都在servlet-api.jar中。

javac -classpath F:/tomcat6/lib/servlet-api.jar -d . HelloServlet.java

然后把HelloServlet.class放到/helloworld/WEB-INF/classes/目录下,然后启动Tomcat,在浏览器中访问:http://localhost:8080/helloservlet/helloworld即可在控制台上看到输出!

* /helloservlet/WEB-INF/classes/cn/itcast/servlet/HelloServlet.class

 

 

1     <servlet>
2         <servlet-name>hello</servlet-name>
3         <servlet-class>cn.servlet.HelloServlet</servlet-class>
4     </servlet>
5     <servlet-mapping>
6         <servlet-name>hello</servlet-name>
7         <url-pattern>/helloworld</url-pattern>
8     </servlet-mapping>

Servlet接口

 

1、Servlet的生命周期

 

所谓xxx的生命周期,就是说xxx的出生、服务,以及死亡。Servlet生命周期也是如此!与Servlet的生命周期相关的方法有:

 

* void init(ServletConfig)

 

* void service(ServletRequest,ServletResponse)

 

*  void destroy()

 

 

 

1.1 Servlet的出生

 

服务器会在Servlet第一次被访问时创建Servlet,或者是在服务器启动时创建Servlet。如果服务器启动时就创建Servlet,那么还需要在web.xml文件中配置。也就是说默认情况下,Servlet是在第一次被访问时由服务器创建的。

 

而且一个Servlet类型,服务器只创建一个实例对象,例如在我们首次访问http://localhost:8080/helloservlet/helloworld时,服务器通过“/helloworld”找到了绑定的Servlet名称为cn.servlet.HelloServlet,然后服务器查看这个类型的Servlet是否已经创建过,如果没有创建过,那么服务器才会通过反射来创建HelloServlet的实例。当我们再次访问http://localhost:8080/helloservlet/helloworld时,服务器就不会再次创建HelloServlet实例了,而是直接使用上次创建的实例。

 

Servlet被创建后,服务器会马上调用Servletvoid init(ServletConfig)方法。请记住, Servlet出生后马上就会调用init()方法,而且一个Servlet的一生。这个方法只会被调用一次。这好比小孩子出生后马上就要去剪脐带一样,而且剪脐带一生只有一次。

 

我们可以把一些对Servlet的初始化工作放到init方法中!

 

 

 

1.2 Servlet服务

 

  当服务器每次接收到请求时,都会去调用Servletservice()方法来处理请求。服务器接收到一次请求,就会调用service() 方法一次,所以service()方法是会被调用多次的。正因为如此,所以我们才需要把处理请求的代码写到service()方法中!

 

 

 

1.3 Servlet的离去

 

  Servlet是不会轻易离去的,通常都是在服务器关闭时Servlet才会离去!在服务器被关闭时,服务器会去销毁Servlet,在销毁Servlet之前服务器会先去调用Servletdestroy()方法,我们可以把Servlet的临终遗言放到destroy()方法中,例如对某些资源的释放等代码放到destroy()方法中。

 

 

 

2Servlet接口相关类型

 

Servlet接口中还存在三个我们不熟悉的类型:

 

* ServletRequestservice() 方法的参数,它表示请求对象,它封装了所有与请求相关的数据,它是由服务器创建的;

 

* ServletResponseservice()方法的参数,它表示响应对象,在service()方法中完成对客户端的响应需要使用这个对象;

 

* ServletConfiginit()方法的参数,它表示Servlet配置对象,它对应Servlet的配置信息,那对应web.xml文件中的<servlet>元素。

 

posted on 2016-05-16 11:31  该名称已被使用  阅读(232)  评论(0编辑  收藏  举报