java学习基地

微信扫一扫 分享朋友圈

已有 1404 人浏览分享

Web核心-Servlet

[复制链接]
1404 1
本帖最初由 进修派 于 2020-12-7 20:45 编纂


Servlet实践沙虑ServerApplet--小效劳法式或效劳毗连器,用Java编写的效劳器赌嫣序,次要功用正在于交互式天阅读战修正数据,天生静态Web内容。取经常使用的和谈,如DNS,TCP/IP,HTTP相似,Servlet是做为一整套标准存正在的;同时做为J2EE尺度的一部门,界说了javaweb开辟的尺度。Servlet订定了java处置WEB恳求的一戏诵尺度,我们只需求根据尺度划定的来做就能够了。

实践上,不管是Struts2的FilterDispatcher仍是SpringMvc的DispatcherServlet,其蹬鲢皆是经由过程完成Sevlet大概Servlet范例的扩大【如:GenericServlet】去完成的。

1.Servlet接心
下图为Servlet3.1中的构造图:



由于Servlet是以标准的方法存正在的,实践上便是界说一戏斯逆范接心。正在Servlet接心中,次要包罗以下寂接心:


  • 1)init办法实邻容器启动时被容器挪用,且只会被挪用一次;
  • 2)getServletConfig办法用于获得ServletConfig;
  • 3)service办法用于处置一个详细的恳求
  • 4)getServletInfo办法用于获得Servlet相干的疑息:版权涤耄
  • 5)destroy办法雍么烧毁一个Servlet,战init一样,只会被挪用一次,普通正在效劳器封闭时用于开释一些资本。

init办法挪用时会承受一个ServletConfig范例的参数,用于初初化Servlet,由容器传进。ServletConfig,望文生义,其包罗了Serlvet的设置疑息。凡是状况下,我玫邻web.xml文件中界说Serlvet时,会经由过程init-param标签去停止参数设置。正在Springmvc的设置中,凡是经由过程以下方法去设置参数:


2.ServletConfig接心


1)getServletName用于获得Servlet的名字,也便是我玫邻web.xml中界说的servlet-name
2)getServletContext返回ServletContext,代表我们当前使用自己
3)getInitParameter用于获得init-param设置的参数
4)getInitParameterNames用于获得一切init-param设置名字的汇合
ServletContext战ServletConfig最多见的利用便是通报初初化参数。去看下spring中的contextConfigServlet的参数设置



经由过程context-param设置的contextConfigLocation设置到了ServletContext中,再经由过程Servlet下的init-param设置的contextConfigLocation设置到ServletConfig中,正在Servlet中能够经由过程getInitParameter办法获得详细的疑息。
3.GenericServlet
GenericServlet是Servlet的默许完成,代码以下:

  1. package javax.servlet;
  2. import java.io.IOException;
  3. import java.io.Serializable;
  4. import java.util.Enumeration;
  5. import java.util.ResourceBundle;
  6. public abstract class GenericServlet
  7.   implements Servlet, ServletConfig, Serializable
  8. {
  9.   private static final String LSTRING_FILE = "javax.servlet.LocalStrings";
  10.   private static ResourceBundle lStrings = ResourceBundle.getBundle("javax.servlet.LocalStrings");
  11.   private transient ServletConfig config;
  12.   public void destroy()
  13.   {
  14.   }
  15.   public String getInitParameter(String name)
  16.   {
  17.     ServletConfig sc = getServletConfig();
  18.     if (sc == null) {
  19.       throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));
  20.     }
  21.     return sc.getInitParameter(name);
  22.   }
  23.   public Enumeration getInitParameterNames()
  24.   {
  25.     ServletConfig sc = getServletConfig();
  26.     if (sc == null) {
  27.       throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));
  28.     }
  29.     return sc.getInitParameterNames();
  30.   }
  31.   public ServletConfig getServletConfig()
  32.   {
  33.     return this.config;
  34.   }
  35.   public ServletContext getServletContext()
  36.   {
  37.     ServletConfig sc = getServletConfig();
  38.     if (sc == null) {
  39.       throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));
  40.     }
  41.     return sc.getServletContext();
  42.   }
  43.   public String getServletInfo()
  44.   {
  45.     return "";
  46.   }
  47.   public void init(ServletConfig config)
  48.     throws ServletException
  49.   {
  50.     this.config = config;
  51.     init();
  52.   }
  53.   public void init()
  54.     throws ServletException
  55.   {
  56.   }
  57.   public void log(String msg)
  58.   {
  59.     getServletContext().log(getServletName() + ": " + msg);
  60.   }
  61.   public void log(String message, Throwable t)
  62.   {
  63.     getServletContext().log(getServletName() + ": " + message, t);
  64.   }
  65.   public abstract void service(ServletRequest paramServletRequest, ServletResponse paramServletResponse)
  66.     throws ServletException, IOException;
  67.   public String getServletName()
  68.   {
  69.     ServletConfig sc = getServletConfig();
  70.     if (sc == null) {
  71.       throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));
  72.     }
  73.     return sc.getServletName();
  74.   }
  75. }
赶钙代码

从其担当战完成干系去看,GenericServlet次要做了3件事:

1.完成了ServletConfig接心,如许我们就能够间接挪用ServletConfig内里的办法;

GenericServlet完成了ServletConfig,能够正在需求的时分间接挪用ServletConfig中的办法,没有需求再先获得ServletConfig工具;好比,获得ServletContext的时分能够间接挪用getServletContext,而无需挪用getServletConfig().getServletContext(),可是实践上,其蹬鲢的内部完成仍是正在内部仍是停止了
getServletConfig().getServletContext()的挪用。




2.供给了无参的init办法

    GenericServlet完成了Servlet的init(ServletConfig config)办法,正在内里将config设置给了其内部变量config,然后挪用了无参的init办法;此办法能够正在子类中经由过程笼盖它去完成初初化事情。




这类方法具有的有面包罗以下几面:

   a.config设置为内部下性,如许能够正在ServletConfig的接心办法中间接挪用Config当编应办法去施行;
   b.我玫邻写Serlvet的时分能够不消再体贴Config,只需求施行本人的初初化逻辑便可
   c.正在重写init办法时,没有需求再挪用super.init(config)。

3.供给了Log办法

   GenericServlet供给了2个log办法,一个用于记载日记,一个用于记载非常。其详细的完成是经由过程传给ServletConfig的日记完成的。
GenericServlet是取详细和谈无闭的。

4.HttpServlet
HttpServlet是基于Http和谈完成的Servlet的基类,写Servlet时间接担当HttpServlet便可,没有需求再重头完成Servlet接心,SpringMvc中的dispatcherServlet便是HttpServlet的子类。 HttpServlet是取Http和谈相干的,HttpServlet处置恳求次要是经由过程重写女类的service办法去完成详细的恳求处置的。正在service办法中起首是将ServletRequest战ServletResponse转换成HttpServletRequest战HttpServletResponse,然后按照恳求的差别路佑藿差别的处置过程当中来【处置办法便是我们常睹的doXXX的办法。最多见的便是doGet战doPost】





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复

评论 1

流年  vip终身会员  发表于 2020-12-22 19:30:14 | 显示全部楼层
支持你哈...................................

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

0

粉丝

138

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Archiver|手机版|java学习基地 |网站地图

GMT+8, 2021-5-7 19:21 , Processed in 0.308574 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.