Java web的三大组件

一、web.xml的配置就是主要包括Java web的三大组件:

servlet、filter、listener

1. servlet

1)servlet标准接口包括: init()/service(request,response)/destroy();不要想得太复杂,servlet就是如下一点点的方法。不管什么spring还是啥,万变不离其宗!!

package javax.servlet;

import java.io.IOException;

public interface Servlet {
    void init(ServletConfig var1) throws ServletException;

    ServletConfig getServletConfig();

    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    String getServletInfo();

    void destroy();
}

 

2) 所有实现类必须继承于javax.servlet.servlet并实现以上三个方法。因为有这个三个方法才会被容器Tomcat所识别调用!这是约定好的!

3)由service(request,response)处理请求并返回响应。即使httpServlet也是实现了service方法再从这个方法分散为6个请求处理类型:

doPost()/doGET()/doDelete()....对应HTTP几个请求类型!

4)当Tomcat接收到客户端请求的时候,会创建响应的servletRequest和servletResponse对象并传给对应的servlet,调用其service()方法!!

5)把servlet丢进Tomcat咯(配置web.xml,让Tomcat知道它的存在!!!)刷存在感咯~

    //定义一个servlet(名称)和指定它的实现类:这里使用的是spring servlet总管(它也是servlet的一个实现类)
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
   //对于上面定义的servlet,配置访问它的URL请求路径:这里表示带*.do的方式
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

2. Filter

1)所有的servlet过滤器类都必须要实现javax.servlet.Filter接口

package javax.servlet;

import java.io.IOException;

public interface Filter {
    default void init(FilterConfig filterConfig) throws ServletException {
    }

    void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;

    default void destroy() {
    }
}

2)在web.xml中配置好Filter之后(也就是告知Tomcat容器)。当有客户请求过滤器关联的URL时,servlet容器将先调用过滤器的doFilter方法。

3)FilterChain用于抛向下一个过滤器的参数。形成一个过滤器链(多个过滤器连接在一起)。请求必须通过这么多的过滤器链之后才能得到后台处理响应!

4)web.xml中关于filter的配置:

先定义一个filter(名字)和实现类:自己实现的Filter类!!!定义filter必须放在关联URL配置前面!
<filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
//关联指定的URL请求!这里/*表示拦截所有的请求!!!

    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

5)如果有过滤器的存在,请求的时候要经过过滤器,响应的时候也要经过过滤器!!

3. Listener监听器

package java.util;

/**
 * A tagging interface that all event listener interfaces must extend.
 * @since JDK1.1
 */
public interface EventListener {
}



.....

package javax.servlet;

import java.util.EventListener;

public interface ServletRequestListener extends EventListener {
    default void requestDestroyed(ServletRequestEvent sre) {
    }

    default void requestInitialized(ServletRequestEvent sre) {
    }
}

1. 监听器也是一个实现特定接口的普通Java程序!!!这个程序专门用于监听另一个Java对象的方法调用或者属性改变!!!

2. servlet监听器主要分为三大类:上下文事件、会话事件、请求事件(URL请求时候!!)!!

2.1 与servlet相关的listener都最终继承于EventListener!!他们涵盖了servlet声明周期中你感兴趣的每个事件!!

3. 例如:ServletContext变化而触发的监听器的响应具体包括:在服务器启动时,ServletContext被创建的时候,服务器关闭时,ServletContext将被销毁的时候等。

我们在spring中,想要在服务器启动时就加载spring容器完成依赖注入的配置如下:

<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext.xml的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。

ApplicationContext.xml这个配置文件部一般默认放置在。applicationContext的默认的路径是”/WEB-INF/applicationContext.xml。也可以在web.xml中配置该文件的其他位置,配置如下:

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:applicationContext.xml
            classpath:applicationContext-security.xml;
        </param-value>
</context-param>

以下详解

org.springframework.web.context.ContextLoaderListener类实现了javax.servlet.ServletContextListener接口。ServletContextListener接口能够监听ServletContext对象的生命周期,因为每个web应用仅有一个ServletContext对象,故实际上该接口监听的是整个web应用。

实现该接口的类在web.xml中作为监听器配置后,当web应用启动后,会触发ServletContextEvent事件,调用ContextLoaderListener的contextInitialized(ServletContextEvent sce)方法。

ContextLoaderListener通过一个ContextLoader对象来初始化Spring容器。在contextInitialized方法中调用contextLoader.initWebApplicationContext(event.getServletContext())。

ContextLoader类的initWebApplicationContext方法即可返回一个WebApplicationContext对象context。并通过 servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context)将WebApplicationContext对象放置在ServletContext对象中。initWebApplicationContext方法通过调用以下方法实例化并设置WebApplicationContext对象。

 

转载于:https://my.oschina.net/u/3697586/blog/1926520

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值