javawweb三大组件

本文详细介绍了JavaWeb开发中三个核心组件:Servlet、Filter和Listener的概念、配置及使用方法。包括Servlet的请求处理流程,Filter的请求拦截机制,以及Listener的事件监听功能。

javaweb三大组件

servlet

概念

  1. Server applet:运行在服务器端的小程序
  2. Servlet是一个接口,定义了java类被浏览器访问的规则
  3. 实现servlet,复写方法

配置

web.xml
<!--配置Servlet -->
		    <servlet>
		        <servlet-name>hello_servlet</servlet-name>
		        <servlet-class>cn.web.servlet.Servlet</servlet-class>
		    </servlet>
		
		    <servlet-mapping>
		        <servlet-name>hello_servlet</servlet-name>
		        <url-pattern>/*</url-pattern>
		    </servlet-mapping>
注解
package com.web.servlet;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet("/hello_servlet")
public class ServletDemo implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("servlet");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

filter

概念

  1. 过滤器拦截请求,完成一些特殊功能
  2. eg:登陆验证、统一编码处理、过滤敏感词汇等

配置

web.xml
<?xml version="1.0" encoding="utf-8" ?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <filter>
        <filter-name>filter</filter-name>
        <filter-class>cn.web.filter.Filter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>filter</filter-name>
        <url-pattern>/*</url-pattern>
        <!-- 拦截方式 -->
        <dispatcher>REQUEST</dispatcher> 
    </filter-mapping>
</web-app>

注解
package cn.web.filter;

import javax.servlet.*;
import javax.servlet.Filter;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter("/*") // configure the interception path
public class FilterDemo1 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    
        // release
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
        
    }
}

执行流程

  1. 过滤器
  2. 放行后的资源
  3. 过滤器放行后的代码

listener

监听机制

  1. 事件
  2. 事件源
  3. 监听器
  4. 注册监听

配置

web.xml
<?xml version="1.0" encoding="utf-8" ?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

	<!--  Listener  -->
    <listener>
        <listener-class>cn.web.listener.ContextLoaderListener</listener-class>
    </listener>
	<!--  specifying initialization parameters  -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
    </context-param>
</web-app>

注解
package cn.web.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.io.FileInputStream;

@WebListener
public class ContextLoaderListener implements ServletContextListener {
    /**
     * 监听ServletContext对象创建的,服务器启动后自动创建ServletContext对象
     * 服务器启动后自动调用该方法
     * @param servletContextEvent
     */
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        // get ServletContext object
        ServletContext servletContext = servletContextEvent.getServletContext();
        // load resource file
        String contextConfigLocation = servletContext.getInitParameter("contextConfigLocation");
        // get real path
        String realPath = servletContext.getRealPath(contextConfigLocation);
        // load into memory
        try {
            FileInputStream fis = new FileInputStream(realPath);
            System.out.println("fis:" + fis);
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("ServletContext Initialized...");
    }

    /**
     * 服务器关闭后ServletContext对象被销毁,服务器正常关闭调用该方法
     * @param servletContextEvent
     */
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext Destroyed...");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值