首页 > 代码库 > servlet学习

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>