Servlet相关常用类

包括:

一.Servlet体系

二.ServletContext接口和ServletConfig接口

一.Servlet体系
    如下图所示:

    总共3个类:Servlet接口,GenericServlet抽象类,HttpServlet抽象类。

1.1 Servlet 接口
    对于Servlet接口,有5个方法,如下:
[java]  view plain  copy
  1. public interface Servlet {  
  2.     public void init(ServletConfig config) throws ServletException;  
  3.     public ServletConfig getServletConfig();  
  4.    
  5.     public void service(ServletRequest req, ServletResponse res)  
  6.       throws ServletException, IOException;  
  7.    
  8.     public String getServletInfo();  
  9.     public void destroy();  
  10. }  

    解释:
  • init():初始化方法
  • getServletConfig():可以得到一个ServletConfig对象,利用这个参数可以得到初始化参数
  • service():servlet对于请求的一个响应
  • getServletInfo():返回servlet的相关信息
  • destroy():销毁Servlet。

1.2 GenericServlet 抽象类
   它是一个抽象类。实现了Servlet接口方法的init()方法,但是最重要的service()方法并没有实现 。如下代码:
[java]  view plain  copy
  1. public void init(ServletConfig config) throws ServletException {  
  2.     this.config = config;  
  3.     this.init();  
  4. }  
  5. public void init() throws ServletException {  
  6. }  


1.3 HttpServlet 抽象类
    它是一个抽象类。实现了Servlet接口的service()方法。在service()方法中,根据一定的条件分发到doGet()或者doPost()方法中。
主要代码如下:
[java]  view plain  copy
  1. protected void service(HttpServletRequest req, HttpServletResponse resp)    
  2.     throws ServletException, IOException {    
  3.     
  4.     String method = req.getMethod();    
  5.     
  6.     if (method.equals(METHOD_GET)) {    
  7.         long lastModified = getLastModified(req);    
  8.         if (lastModified == -1) {    
  9.             // servlet doesn't support if-modified-since, no reason    
  10.             // to go through further expensive logic    
  11.             doGet(req, resp);    
  12.         } else {    
  13.             long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);    
  14.             if (ifModifiedSince < (lastModified / 1000 * 1000)) {    
  15.                 // If the servlet mod time is later, call doGet()    
  16.                 // Round down to the nearest second for a proper compare    
  17.                 // A ifModifiedSince of -1 will always be less    
  18.                 maybeSetLastModified(resp, lastModified);    
  19.                 doGet(req, resp);    
  20.             } else {    
  21.                 resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);    
  22.             }    
  23.         }    
  24.     
  25.     } else if (method.equals(METHOD_HEAD)) {    
  26.         long lastModified = getLastModified(req);    
  27.         maybeSetLastModified(resp, lastModified);    
  28.         doHead(req, resp);    
  29.     
  30.     } else if (method.equals(METHOD_POST)) {    
  31.         doPost(req, resp);    
  32.             
  33.     } else if (method.equals(METHOD_PUT)) {    
  34.         doPut(req, resp);            
  35.             
  36.     } else if (method.equals(METHOD_DELETE)) {    
  37.         doDelete(req, resp);    
  38.             
  39.     } else if (method.equals(METHOD_OPTIONS)) {    
  40.         doOptions(req,resp);    
  41.             
  42.     } else if (method.equals(METHOD_TRACE)) {    
  43.         doTrace(req,resp);    
  44.             
  45.     } else {    
  46.         //    
  47.         // Note that this means NO servlet supports whatever    
  48.         // method was requested, anywhere on this server.    
  49.         //    
  50.     
  51.         String errMsg = lStrings.getString("http.method_not_implemented");    
  52.         Object[] errArgs = new Object[1];    
  53.         errArgs[0] = method;    
  54.         errMsg = MessageFormat.format(errMsg, errArgs);    
  55.             
  56.         resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);    
  57.     }    
  58. }    

    一般来说,我们自定义自己的servlet就继承HttpServlet,再重写doGet(),doPost()方法即可。


二.ServletContext接口和ServletConfig接口

2.1 ServletContext接口
    WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
    ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象

ServletContext作用:
1. 用于Servlet之间通讯
    由于 一个WEB应用中的所有Servlet共享同一个ServletContext对象 ,因此 Servlet对象之间可以通过ServletContext 对象来实现通讯。如代码: context.setAttribute("name", "haha");  ~~~~~~~~~~String name = context.getAttribute("name");   

2. 用于获取WEB应用的初始化参数
    比如在web.xml中,有如下初始化:
[html]  view plain  copy
  1. <context-param>     
  2.   
  3.     <param-name>url</param-name>     
  4.   
  5.     <param-value>jdbc:mysql://localhost:3306/4g</param-value>     
  6.   
  7. </context-param>    
 
      即可用如下代码获得初始化参数:
[java]  view plain  copy
  1. String url = context.getInitParameter("url");  



3.用于Servlet转发
[java]  view plain  copy
  1. RequestDispatcher  rd  = context.getRequestDispatcher("/index.jsp");     
  2. rd.forward(request, response);   


Ps:转发有3种方式:
  1. forward方法:request.getRequestDispatcher("/url").forward(request, response),地址栏不会改变,同样是在服务器端完成,仅输出被转发的URL中的内
  2. sendRedirect方法:只是客户重新发起一个请求,第二个请求指向其参数url。一般称做重定向,客户端的地址栏将改变为url值,是由客户端发起的第二次请求。例如:response.sendRedirect(request.getContextPath()+"/login.html"); 
  3. iinclude方法:使原先的Servlet和转发到的Servlet都可以输出响应信息,即原先的Servlet还可以继续输出响应信息。也就是说可以保留原先的信息。

2.2 ServletConfig接口
ServletConfig 是一个接口。
    在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。(配置在某个servlet标签或者整个web-app下)
    当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。


参考:
1.ServletConfig与ServletContext对象详解:http://blog.sina.com.cn/s/blog_696024a90100o6hq.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值