Servlte开发入门

Servlet应用程序的体系结构图

Servlet是使用Java语言编写的运行在服务器端的程序,一般指的是任何实现了Servlet接口的类。依赖包javax.servlet.api.jar
针对Servlet接口提供有两个默认实现,GenericServlet和HTTPServlet

  • GenericServlet是抽象类,只提供了部分实现,没有实现HTTP请求处理。除了service()方法外,其他方法都已经实现。
  • HTTPServlet继承GenericServlet的所有方法,并为HTTP中的请求提供了具体操作方法。

实现第一个Servlet程序

编写HelloServlet类继承GenericServlet,重写service()方法。Servlet使用输出流来产生响应,我们获取输出流PrintWriter对象并向客户端发送字符数据。

public class HelloServlet extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        PrintWriter writer = servletResponse.getWriter();
        writer.println("hello world!");
    }
}

在web.xml文件中我们编写mapping映射。

  1. 根据访问的地址/hello在<servlet-mapping>中找到对应的<url-pattern>
  2. 就能得到<servlet-name>是HelloServlet
  3. 根据<servlet-name>的值是HelloServlet找到对应的<servlet>
  4. 得到<servlet-class>是servlet.HelloServlet
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>servlet.HelloServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

将我们的web项目部署到tomcat上,此时如果我们访问http://localhost:8081/javaweb01/hello就能得到hello world!


使用HttpServlet类

由于大多数Web应用都通过HTTP协议和客户端进行交互,所以提供了一个HttpServlet类专门用于创建用于HTTP协议的Servlet,它重写了service()方法,根据用户请求方式不同,定义了相应的doXXX()方法处理用户请求,我们继承HttpServlet类后只需要重写对应的doXXX()方法即可。

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        writer.println("hello world!");
    }
}

默认请求方法为Get,所以我们只需要重写doGet()方法。如果我们没有重写对应请求方式的doXXX()方法会报405错误。


Servlet的生命周期

Servlet接口定义了5个抽象方法,其中init(),service(),destroy()这3个方法可以表现Servlet的生命周期。

  • init()方法:初始化阶段,容器接收到请求时检查内存中是否存在Servlet,有就用没有就创建Servlet并调用此方法初始化,通过一个ServletConfig向Servlet传递初始化配置信息。
  • service()方法:运行阶段,容器会为请求新建request和response对象作为参数传递给Servlet的service()方法。负责响应用户请求,在整个生命周期中被多次调用。
  • destroy()方法:销毁阶段,在服务器关闭或Servlet对象被移除时,Servlet对象会被销毁并调用这个方法,用来释放被Servlet对象占用的资源。

虚拟路径的映射

  1. Servlet的多重映射
    Servlet的多重映射指的是同一个Servlet可以被映射成多个虚拟路径。我们配置多个<servlet-mapping>元素其中的<url-pattern>不同,但都指向一个<servlet-name>

  2. 映射路径使用通配符
    可以在Servlet映射的路径中使用通配符*。通配符有两种格式:
    1)格式为 *.扩展名,例如*.html匹配以.html结尾的所有URL地址。
    2)格式为 /* ,例如/abc/*匹配以/abc开头的所有URL地址。

  3. 缺省Servlet
    如果Servlet的映射路径是/那么这个Servlet就是当前Web应用的缺省Servlet,如果请求在web.xml文件中找不到匹配的映射路径,就会交给缺省Servlet处理。


posted @ 2022-07-22 22:52  独游空想家  阅读(65)  评论(0编辑  收藏  举报