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;
}