10. springBoot——注册servlet三大组件

1. 注解方式完成Servlet组件注册

1.1 Servlet组件注册——@ServletComponentScan

boot中,可以通过注解(@ServletComponentScan)扫描的方式完成servlet组件的注册

操作步骤:

1)编写servlet(3.0)

package com.bjc.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/** SpringBoot整合servlet
 * @author Administrator
 *
 **
 *		在xml中配置servlet
		<servlet>
		 <servlet-name>bootServlet</servlet-name>
		 <servlet-class>com.bjc.servlet.BootServlet</servlet-class>
		</servlet>
		 
		<servlet-mapping>
		 <servlet-name>bootServlet</servlet-name>
		 <url-pattern>/bootServlet</url-pattern>
		</servlet-mapping>
 *
 */
@WebServlet(name="bootServlet",urlPatterns = "/bootServlet")
public class BootServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}

}

注意:@WebServlet注解是servlet3.0之后出现的注解,用于简化servlet的配置

2)编写启动类

package com.bjc.servlet;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);

	}

}

注意:@ServletComponentScan注解会在boot启动的时候,扫描@WebServlet注解并实例化该类

1.2 Filter组件注册——@WebFilter

通过注解扫描完成 Filter 组件的注册

步骤:

1)创建监听器类实现Filter接口

package com.bjc.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

/** springBoot整合filter方式一
	<filter>
		 <filter-name>FirstFilter</filter-name>
		 <filter-class>com.bjc.filter.FirstFilter</filter-class>
	</filter>
	<filter-mapping>
		 <filter-name>FirstFilter</filter-name>
		 <!-- 拦截的servlet -->
		 <url-pattern>/bootServlet</url-pattern>
	</filter-mapping>
 */
//@WebFilter(filterName="FirstFilter",urlPatterns={"/bootServlet","*.do","*.jsp"})
@WebFilter(filterName="FirstFilter",urlPatterns="/bootServlet")
public class FirstFilter implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("enter   ...");
		chain.doFilter(request, response);
		System.out.println("leave   ...");
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

}

注意:

1. @WebFilter注解是servlet3.0出现的注解

2. 该过滤器拦截/bootServlet的请求

2)编写启动类

package com.bjc.filter;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);

	}

}

注意:过滤器的整合在启动类中也是使用@ServletComponentScan注解来扫描的。

1.3 Listener组件注册——@WebListener

1.3.1 定义监听器——@WebListener

package com.bjc.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class BootListener implements ServletContextListener {

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("监听器启动了。。。");
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("监听器结束了。。。");
	}

}

监听类上使用注解@WebListener标明这个类是一个监听器类

1.3.2 启动类

package com.bjc.listener;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}

}

启动类上需要加注解@ServletComponentScan扫描监听器注解

2. 代码方式

2.1 注册servlet

步骤:

1. 定义一个返回值类型为ServletRegistrationBean的方法

2. 创建一个ServletRegistrationBean的对象,将需要注册的servlet传给ServletRegistrationBean

3. 添加url映射

4. 返回ServletRegistrationBean对象

5. 方法上添加@Bean注解

2.1.1 自定义servlet

package com.bjc.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class MyServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.getWriter().write("hello MyServlet!");
	}
}

2.1.2 配置类

配置访问路径/hello与/myServlet的时候,走我们定义的servlet

@Bean
public ServletRegistrationBean myServlet(){
	ServletRegistrationBean<MyServlet> servlet = new ServletRegistrationBean<>(new MyServlet());
	servlet.setUrlMappings(Arrays.asList("/hello","/myServlet"));
	return servlet;
}

运行结果:

2.2 注册过滤器Filter

2.2.1 自定义过滤器

package com.bjc.filter;

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

public class MyFilter implements Filter {
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {

	}

	@Override
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
		System.out.println("进入过滤器。。。。。");
		filterChain.doFilter(servletRequest,servletResponse);
	}

	@Override
	public void destroy() {

	}
}

2.2.2 配置

@Bean
public FilterRegistrationBean myFilter(){
	FilterRegistrationBean<MyFilter> filer = new FilterRegistrationBean<>(new MyFilter());
	filer.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
	return filer;
}

运行结果:

2.3 监听器

2.3.1 自定义监听器

package com.bjc.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyListener implements ServletContextListener {
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("应用启动了。。。");
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("应用结束了。。。");
	}
}

2.3.2 配置

1)定义一个返回值为ServletListenerRegistrationBean的方法,泛型类型就是自定义的监听器类

2)返回一个ServletListenerRegistrationBean的对象,构造器为自定义监听器对象

3)在方法上加上注解@Bean

@Bean
public ServletListenerRegistrationBean myListener(){
	ServletListenerRegistrationBean<MyListener> listener = new ServletListenerRegistrationBean<>(new MyListener());
	return listener;
}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值