第一种 实现 Servlet 接口,需要覆写 Servlet 的5个方法,并将ServletConfig对象保存到类级变量中

  1. package app01a;
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5.  
  6. import javax.servlet.Servlet;
  7. import javax.servlet.ServletConfig;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.ServletRequest;
  10. import javax.servlet.ServletResponse;
  11. import javax.servlet.annotation.WebServlet;
  12.  
  13. @WebServlet(name = "MyServlet", urlPatterns = {"/my"})
  14. public class MyServlet implements Servlet {
  15. private transient ServletConfig servletConfig;
  16.  
  17. @Override
  18. public void destroy() { }
  19.  
  20. @Override
  21. public ServletConfig getServletConfig() {
  22. return servletConfig;
  23. }
  24.  
  25. @Override
  26. public String getServletInfo() {
  27. return "My Servlet";
  28. }
  29.  
  30. @Override
  31. public void init(ServletConfig servletConfig) throws ServletException {
  32. this.servletConfig = servletConfig;
  33.  
  34. }
  35.  
  36. @Override
  37. public void service(ServletRequest resuest, ServletResponse response) throws ServletException, IOException {
  38. String servletName = servletConfig.getServletName();
  39. response.setContentType("text/html");
  40. PrintWriter writer = response.getWriter();
  41. writer.print("<html><head></head>"
  42. + "<body>Hello form "
  43. + servletName
  44. + "</body></html>");
  45. }
  46. }

第二种 继承抽象类 GenericServlet覆写service()方法

  1. package app01a;
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5.  
  6. import javax.servlet.GenericServlet;
  7. import javax.servlet.ServletConfig;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.ServletRequest;
  10. import javax.servlet.ServletResponse;
  11. import javax.servlet.annotation.WebInitParam;
  12. import javax.servlet.annotation.WebServlet;
  13.  
  14. @WebServlet(name = "GenericServletDemoServlet", urlPatterns = { "/generic" },
  15. initParams = { @WebInitParam(name = "admin", value = "Harry taciak"),
  16. @WebInitParam(name = "email", value = "admin@example.com")
  17. }
  18. )
  19. public class GenericServletDemoServlet extends GenericServlet {
  20. private static final long serialVersionUID = 1L;
  21.  
  22. @Override
  23. public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
  24. ServletConfig servletConfig = getServletConfig();
  25. String admin = servletConfig.getInitParameter("admin");
  26. String email = servletConfig.getInitParameter("email");
  27. response.setContentType("text/html");
  28. PrintWriter writer = response.getWriter();
  29. writer.print("<html><head></head><body>" +
  30. "Admin: " + admin +
  31. "<br/>Email: " + email +
  32. "</body></html>");
  33. }
  34.  
  35. }

第三种 继承类 HttpServlet  覆写doGet()和doPost()方法 public abstract class HttpServlet extends GenericServlet

  1. package app01c;
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5.  
  6. import javax.servlet.ServletException;
  7. import javax.servlet.annotation.WebServlet;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11.  
  12. @WebServlet(name = "SimleServlet", urlPatterns = {"/simple"})
  13. public class SimpleServlet extends HttpServlet {
  14. private static final long serialVersionUID = 1L;
  15.  
  16. public SimpleServlet() {
  17. super();
  18. }
  19.  
  20. /**
  21. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  22. */
  23. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  24. response.setContentType("text/html");
  25. PrintWriter writer = response.getWriter();
  26. writer.println("<html>");
  27. writer.println("<head>");
  28. writer.println("</head>");
  29. writer.println("<body>");
  30. writer.println("This is the Simple Servlet");
  31. writer.println("</body>");
  32. writer.println("</html>");
  33. }
  34.  
  35. /**
  36. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  37. */
  38. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  39. doGet(request, response);
  40. }
  41. }

GenericServlet、HttpServlet是Servlet接口有两个默认的实现类。

HttpServlet在原有的Servlet接口上添加了一些HTTP协议的处理方法,是能够处理HTTP请求的Servlet。其功能比Servlet更加强大,因此开发人员在编写Servlet时,通常应继承HttpServlet类,而不是直接实现Servlet接口。

HttpServlet在实现Servlet接口时覆写了service()方法,该方法体内的代码会自动判断用户的请求,如果是Get请求,则自动调用HttpServlet的doGet()方法;如果是Post请求,则自动调用doPost()方法。通常开发人员在编写Servlet时,只需要覆写doGet()或doPost()方法,而不用再去覆写service()方法。

Servlet开发的三种方法的更多相关文章

  1. struts2的action访问servlet API的三种方法

    学IT技术,就是要学习... 今天无聊看看struts2,发现struts2的action访问servlet API的三种方法: 1.Struts2提供的ActionContext类 Object g ...

  2. Action访问Servlet API的三种方法

    一.为什么要访问Servlet API ? Struts2的Action并未与Servlet API进行耦合,这是Struts2 的一个改良,从而方便了单独对Action进行测试.但是对于Web控制器 ...

  3. Servlet实现的三种方法

    (1)方法一: //这是第一个实现servlet的方法.使用时限servlet接口的方法来实现,使用的时候须要引用servlet-api.jar package com.lc; import java ...

  4. Java Web开发中用Tomcat部署项目的三种方法

    第一种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加: <Context path="/hello" docBase ...

  5. (OPC Client .NET 开发类库)网上很多网友都有提过,.NET开发OPC Client不外乎下面三种方法

    1. 背景 OPC Data Access 规范是基于COM/DCOM定义的,因此大多数的OPC DA Server和client都是基于C++开发的,因为C++对COM/DCOM有最好的支持.现在, ...

  6. LwIP协议栈开发嵌入式网络的三种方法分析

    LwIP协议栈开发嵌入式网络的三种方法分析   摘要  轻量级的TCP/IP协议栈LwIP,提供了三种应用程序设计方法,且很容易被移植到多任务的操作系统中.本文结合μC/OS-II这一实时操作系统,以 ...

  7. C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?

    C#中??和?分别是什么意思? 在C#中??和?分别是什么意思? 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; ...

  8. struts2开发action 的三种方法以及通配符、路径匹配原则、常量

    struts2开发action 的三种方法 1.继承ActionSupport public class UserAction extends ActionSupport { // Action中业务 ...

  9. 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...

随机推荐

  1. php正则替换双引号里面的字符

  2. Java的map键值对的用法,map的遍历,Entry对象的使用

    思路: 1.定义集合 2.存储数据 3.添加元素 4.遍历 4.1将需要遍历的集合的键封装到set集合中(这用到了entrySet方法,和Entry对象) 4.2声明迭代器或者用for增强循环 4.3 ...

  3. Struts学习资料

    Strust组件—ActionServlet详解 http://ltc603.iteye.com/blog/68637

  4. 整理一些好用的css, javascript资源网站等

    CSS: CSS3信息:http://www.css3.info/ css3生成器:http://css3generator.com/ css3 cross brower生成器:http://css3 ...

  5. Java Web开发和Python Web开发之间的区别

    今天的文章讨论了Java Web开发和Python Web开发之间的区别.我不鼓励我们在这里从Java Web迁移到Python Web开发.我只是想谈谈我的感受.它不一定适合所有情况,仅供我们参考. ...

  6. CentOS 查看进程状态

    Linux中ps与top命令   ============================================================================ 这两个命令都 ...

  7. const 全面理解

    问题1:const int a : 和  int  const  a :的区别 定义一个变量: 类型描述符 + 变量名 类型描述符包括类型修饰符和数据类型. 类型修饰符有:short  long  u ...

  8. js导出excel:前端当前数据的导出

    网上找的库文件,同样做了修改.在导出的时候,有时候数据第一列和最后一列可能是复选框和操作按钮,这个是我们不需要的,加了这个的过滤 //table2excel.js /* * jQuery table2 ...

  9. 最小生成树kruskal模板

    算法思路:每次选取权值最小的边,判断这两个点是否在同一个集合内,如果在则跳过,如果不在则加上这条边的权值 可以使用并查集储存结点,可以快速判断结点是否在同一集合内. #include<iostr ...

  10. 干净的ssm框架项目

    其中数据库只有如下表与字段 访问效果: 项目下载: 干净的ssm框架项目.rar