servlet学习

一直想学习java web开发,但不知道从何着手,查阅了相关资料后决定从servlet开始学习。

一个最基本的 Java Web 项目所需的 jar 包只需要一个 servlet-api.jar,共有 2 个包,分别是 javax.servlet 和 javax.servlet.http。

Java Web 项目还需要一个非常重要的配置文件 web.xml,关于servlet部分的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
 
    <servlet>
        <servlet-name>hello_world</servlet-name>
        <servlet-class>demo.HelloServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>hello_world</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping> 
</web-app>
javax.servlet 和 javax.servlet.http 这两个包总共加起来也不过是三十四个接口和类。需要熟悉如下几个接口:
  • HttpServlet
  • ServetConfig
  • ServletContext
  • Filter
  • FilterConfig
  • FilterChain
  • RequestDispatcher
  • HttpServletRequest
  • HttpServletResponse
  • HttpSession
  • 一些 Listenser 类
其中,HttpServletRequest 和 HttpServletResponse 尤其需要了解。
servlet应用程序体系结构为:
注意:因为容器是通过Java的反射API来创建Servlet实例,调用的是Servlet的默认构造方法(即不带参数的构造方法),所以我们在编写Servlet类的时候,不应该提供带参数的构造方法。
Servlet的生命周期示意图为:
 
Servlet 规范里还有另外一个非常重要而且非常有用的接口那就是 Filter 过滤器。在 web.xml 中Filter的配置必须放在 Servlet 的前面:譬如,
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
                         "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
 
    <filter>
        <filter-name>helloFilter</filter-name>
        <filter-class>demo.HelloFilter</filter-class>
    </filter>
 
    <filter-mapping>
        <filter-name>helloFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
     
    <servlet>
        <servlet-name>hello_world</servlet-name>
        <servlet-class>demo.HelloServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>hello_world</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
 
</web-app>
 

  Servlet接口有五个方法,其用法如:public void init(ServletConfig config)throws ServletException
public void service(ServletRequest request,ServletResponse response)throws ServletException,java.io.IOException

public void destroy()
public ServletConfig getServletConfig()

public java.lang.String getServletInfo()

在Servlet的五个方法中,init,service和destroy是servlet的生命周期方法。在servlet类已经初始化之后,init方法将会被servlet容器所调用。servlet容器只调用一次,以此表明servlet已经被加载进服务中。init方法必须在servlet可以接受任何请求之前成功运行完毕。一个servlet程序员可以通过覆盖这个方法来写那些仅仅只要运行一次的初始化代码,例如加载数据库驱动,值初始化等等。在其他情况下,这个方法通常是留空的。servlet容器为servlet请求调用它的service方法。servlet容器传递一个javax.servlet.ServletRequest对象和javax.servlet.ServletResponse对象。ServletRequest对象包括客户端的HTTP请求信息,而ServletResponse对象封装servlet的响应。在servlet的生命周期中,service方法将会给调用多次。当从服务中移除一个servlet实例的时候,servlet容器调用destroy方法。这通常发生在servlet容器正在被关闭或者servlet容器需要一些空闲内存的时候。仅仅在所有servlet线程的service方法已经退出或者超时淘汰的时候,这个方法才被调用。service方法从ServletResponse对象获得java.io.PrintWriter实例,并发送字符串到浏览器。

posted on 2014-07-25 18:36  wohaha1  阅读(211)  评论(0编辑  收藏  举报