• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

servlet 篇之 ServletConfig, ServletContent,ServletRegistration,ServletContainerInitializer

java 来源:chizimu1724 4次浏览

了解servlet基础有助于我们了解web服务,其实如果你servlet基础好的话,你可以不用springmvc这种第三方框架,自己包装一个简单servlet框架,接下我们来说下工作中常用的servlet基础

1、ServletConfig

这个类主要是获取servlet配置文件信息,比如获取初始化参数,和servletContent,举个列子

假如我web.xml配置了一个servlet

<servlet>
  <servlet-name>Gservlet</servlet-name>
  <servlet-class>servlet.Gservlet</servlet-class>
  <init-param>
    <param-name>name</param-name>
    <param-value>test</param-value>
  </init-param>
</servlet>

<servlet-mapping>
  <servlet-name>Gservlet</servlet-name>
  <url-pattern>/Gservlet</url-pattern>
</servlet-mapping>
public class Gservlet extends HttpServlet{
    private String param;

    public void setParam(String param) {
        this.param = param;
    }

    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        ServletConfig config = this.getServletConfig();  //断点打在这里获取初始化参数及其他信息
    }
}

1、ServletContent

servlet上下文,它保护整个web服务的上下信息,这个接口功能很强大,可以动态创建servlet,filter,listent

并且注册他们,还提供获取上下文的初始化参数信息,和上下web的工程的信息

比如动态注册一个servlet应用

ServletRegistration.Dynamic dynamic = servletContext.addServlet("dservlet",DServlet.class);
dynamic.addMapping("/Dservlet");

获取web应用的初始化参数

web.xml

<context-param>
  <param-name>encode</param-name>
  <param-value>utf-8</param-value>
</context-param>
servletContext.getInitParameterNames()

用的最多应该还是

servletContext.getContextPath()  //获取web工程名,取决你web包的名称
servletContext.getRealPath("/xx")  //获取文件在相对web工程目录的相对位置

3、ServletRegistration

这个类是提供动态注册的类,spring boot 就是通过动态注册servlet到容器

举个注册的列子

try {
    //比如注册RgisterServlet类
    RgisterServlet rgisterServlet = servletContext.createServlet(RgisterServlet.class);
    rgisterServlet.setName("register");   
    ServletRegistration.Dynamic dynamic =    servletContext.addServlet("register",rgisterServlet);
    dynamic.addMapping("/registerServlet");
} catch (ServletException e) {
    e.printStackTrace();
}

4、ServletContainerInitializer

这个类提启动注册相关的servlet功能,这个提供了

void onStartup(Set<Class<?>> var1, ServletContext var2) throws ServletException; //来注册servlet服务

比如我们用spring开发web程序时,会用到一个spring web包(注意,一定要这种目录)

接下来看看里面的内容

里面提供了一个SpringServletContainerInitializer类,这个类把ServletContext带入到这个,然后通过相关功能,把@controller 类动态(ServletRegistration)注入到servlet容器中,所有如果我们需要动态注册相关的servlet到容器中,只要和上面一样在META-INF/services/java.servlet.ServletContainerInitializer中写入我们的实现类就行(只要继承 ServletContainerInitializer)

转载于:https://my.oschina.net/chenping12/blog/1527212


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)