servlet的工作原理及常用对象

时间:2023-01-02 12:22:31

servlet工作原理


原理:
  1.当用户请求一个servlet
  2.服务器会查找web.xml文件,扫描该文件中servlet-mapping的url-pattern
  3.找到匹配的url-pattern
  4.找到与url-pattern绑定的servlet的逻辑名称
  5.根据servlet逻辑名称查找servlet的声明部分,找到与之匹配的逻辑名
  6.根据该逻辑名称找到对应的servlet-class
  7.更加servlet-class提供的类的全名加载servlet
  8.实例化和初始化servlet
  9.调用该servlet方法提供对应的服务
 
  注意:servlet是由程序员定义的,用户只需要去访问,其他的工作(创建实例、初始化、接受请求)全部由服务器完成

servletConfig


servletConfig:代表servlet的配置信息,每一个servlet都有一个servletConfig对象

servletConfig对象是什么?
  封装了servlet在web.xml文件中配置
 
  方法:
      1.getServletName():获取配置文件中<servlet-name>元素的内容
      2.getInitParameter():根据<init-param>中的<param-name>获取<param-value>
      <init-param>
          <param-name>name</param-name>
          <param-value>tom</param-value>

      </init-param>
      3.getInitParameterNames:表示返回所有的<param-name>
      4.getServletContext();
     
      功能:
        读取servlet的初始化配置参数,
        getInitParameter:根据servlet的初始化参数获取初始化参数的值
        getInitParameterNames:返回servlet初始化参数的名称


例如:通过servletConfig获取初始化参数


/**
* Created by Administrator on 2017/7/12.
* //获取初始化参数
*/
public class InitParmaServletDemo extends HttpServlet{
  public void doGet(HttpServletRequest request, HttpServletResponse response){
      response.setContentType("text/html;charset=UTF-8");
      //获取servletConfig
      ServletConfig config=getServletConfig();
      //根据参数的名称获取对应的值
      String paramValue=config.getInitParameter("driver");
      //获取所有的参数的名称的枚举
      Enumeration<String> paramNames=config.getInitParameterNames();
      //遍历名称的枚举
      while (paramNames.hasMoreElements()){
          //取得一个参数的名称
          String paramName=paramNames.nextElement();
          //根据参数名获取值
          String value=config.getInitParameter(paramName);
      }
  }
public void doPost(HttpServletRequest request, HttpServletResponse response){
      doGet(request,response);

}
}

通过servletconfig获取servletContext

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Enumeration;

/**
* Created by Administrator on 2017/7/12.
* 通过servletconfig获取servletContext
*/
public class ServletConfigGetServletContext extends HttpServlet{
  public void doGet(HttpServletRequest request, HttpServletResponse response){

      response.setContentType("text/html;charset=UTF-8");

      //获取servletConfig
      ServletConfig config=getServletConfig();
      //通过servletconfig获取servletContext
      ServletContext context=config.getServletContext();
  }
public void doPost(HttpServletRequest request, HttpServletResponse response){
    doGet(request,response);
}
}

ServletContext


定义:
  代表当前的web应用(一个web应用只有一个servletContext对象),该对象随着web应用被服务器加载而创建

作用:
  获取应用程序的配置信息
 
  例如:

/**
* Created by Administrator on 2017/7/12.
* 通过servletContext获取配置信息
*/
public class InitParamServletContext extends HttpServlet{
  public void doGet(HttpServletRequest request, HttpServletResponse response){

      response.setContentType("text/html;charset=UTF-8");

      //获取servletConfig
      ServletConfig config=getServletConfig();
      //通过servletconfig获取servletContext
      ServletContext context=config.getServletContext();
      //获取参数(第一种)
      String url=context.getInitParameter("url");
      String user=context.getInitParameter("user");
//第二种获取servletContext的方法
      ServletContext context1=getServletContext();
      Enumeration<String> names=context.getInitParameterNames();
      while (names.hasMoreElements()){
          String name=names.nextElement();
          String value=context.getInitParameter(name);


      }

  }
public void doPost(HttpServletRequest request, HttpServletResponse response){
    doGet(request,response);
}
}