开发Servlet的三种方式和Servlet配置详解

前言

在前面的文章中笔者就Servlet整体的框架有了一个认知,基本了解了其运作的原理。这篇文章

笔者将会对Servlet开发的方法和Servlet的配置做一个总结。

         Servlet开发三种方式

在前面Servlet基础框架、源码学习中我们知道了Servlet框架图。链接如下:

http://blog.csdn.net/kiritor/article/details/8967528

这里我们简要的看看其框架图:

根据上述框架图和对源码的简单阅读,可以看出的是开发Servlet的方式基础继承、实现上述

三种不同的Servlet(Servlet、GenericServlet、HttpServlet)

              实现Servlet接口

第一种方式,不常用,实现Servlet接口开进行Servlet开发。此方法业务逻辑的划分不太明确。

[java]

  1. package com.kiritor.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.Servlet;
  5. import javax.servlet.ServletConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletRequest;
  8. import javax.servlet.ServletResponse;
  9. import javax.servlet.http.HttpServlet;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. import com.sun.corba.se.impl.ior.WireObjectKeyTemplate;
  13. /**
  14.  * Servlet implementation class ServletImp
  15.  */
  16. public class ServletImp implements Servlet {
  17.     private static final long serialVersionUID = 1L;
  18.     /**
  19.      * @see HttpServlet#HttpServlet()
  20.      */
  21.     public ServletImp() {
  22.         super();
  23.     }
  24.     @Override
  25.     public void destroy() {
  26.     }
  27.     @Override
  28.     public void init(ServletConfig config) throws ServletException {
  29.     }
  30.     @Override
  31.     public ServletConfig getServletConfig() {
  32.         return null;
  33.     }
  34.     /**
  35.      * service方面里面来处理业务的逻辑*/
  36.     @Override
  37.     public void service(ServletRequest req, ServletResponse res)
  38.             throws ServletException, IOException {
  39.         PrintWriter writer = res.getWriter();
  40.         writer.write(“Imp Servlet!”);
  41.                 writer.flush();
  42.                 writer.close();
  43.  }
  44.     @Override
  45.     public String getServletInfo() {
  46.         // TODO Auto-generated method stub
  47.         return null;
  48.     }
  49. }

 

              继承GenericServlet

这种方式也是比较不常见的,对业务逻辑的处理也是集中在Servcice方法中的。

[java]

  1. package com.kiritor.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.GenericServlet;
  5. import javax.servlet.Servlet;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletRequest;
  8. import javax.servlet.ServletResponse;
  9. /**
  10.  * Servlet implementation class ExGenericServlet
  11.  */
  12. public class ExGenericServlet extends GenericServlet implements Servlet {
  13.     private static final long serialVersionUID = 1L;
  14.     /**
  15.      * @see GenericServlet#GenericServlet()
  16.      */
  17.     public ExGenericServlet() {
  18.         super();
  19.         // TODO Auto-generated constructor stub
  20.     }
  21.     /**
  22.      * @see Servlet#service(ServletRequest request, ServletResponse response)
  23.      */
  24.     public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
  25.         PrintWriter writer = response.getWriter();
  26.         writer.write(“Imp Servlet!”);
  27.                 writer.flush();
  28.                 writer.close();
  29.  }
  30. }

 

                继承HttpServlet

这种方式是最常用的方式,HttpServlet是基于Http协议的。根据Http协议的特点,

HttpServlet提供了不同的业务逻辑的处理的方法,而不是将所有的业务逻辑堆积到

service方法里去处理。业务更加的清晰,最常用的方法就是doPost、doGet方法了。

[java]

  1. package com.kiritor.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. /**
  9.  * Servlet implementation class ExHttpServlet
  10.  */
  11. public class ExHttpServlet extends HttpServlet {
  12.     private static final long serialVersionUID = 1L;
  13.     /**
  14.      * @see HttpServlet#HttpServlet()
  15.      */
  16.     public ExHttpServlet() {
  17.         super();
  18.         // TODO Auto-generated constructor stub
  19.     }
  20.     /**
  21.      * 继承HttpServlet一般在doPost、doGet方法
  22.      * 里面处理业务逻辑
  23.      * 之后由service回调。*/
  24.     /**
  25.      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  26.      */
  27.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  28.         this.doPost(request, response);
  29.     }
  30.     /**
  31.      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  32.      */
  33.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  34.         PrintWriter writer = response.getWriter();
  35.         writer.write(“Imp Servlet!”);
  36.                 writer.flush();
  37.                 writer.close();
  38.       }
  39. }

以上就是servlet实际开发中用到的方法了,不过一般情况下采用第三种方式较多,因为我们

 

的web应用基本都是通过Http协议进行通信的。

            Servlet的配置

了解了Servlet是如何开发的,接下来我们来看看Servlet是如何配置的吧。我们知道Tomcat

是通过web.xml文件得到Servlet的配置信息,从而生成ServletConfig对象传递给init方法的。

这里笔者只是对Servlet的配置做一个简单的描述,至于后续的监听器配置、过滤器配置。到时

在做总结。

好了,直接看看配置文件吧:

 

[html]

  1. <servlet>
  2.     <description></description>
  3.     <display-name>HelloServlet</display-name>
  4.     <!–名字任意,不过建议和类名一样–>
  5.     <servlet-name>HelloServlet</servlet-name>
  6.     <!–类名+包路径–>
  7.     <servlet-class>com.kiritor.servlet.HelloServlet</servlet-class>
  8.       <!–初始化是的参数,必须在这里进行配置–>
  9.       <init-param>
  10.       <description></description>
  11.       <param-name>info</param-name>
  12.       <param-value>this is a init message</param-value>
  13.     </init-param>
  14.   <!–映射配置–>
  15.   </servlet>
  16.   <servlet-mapping>
  17.   <!–和上述的Servlet名一样–>
  18.   <servlet-name>HelloServlet</servlet-name>
  19.   <!–浏览器的访问路径–>
  20.   <url-pattern>/HelloServlet</url-pattern>
  21.   </servlet-mapping>

本次的总结也就到这里了。其详细配置后续在做总结。

标签