一、说明
Web 开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet、 Filter、Listener 等等
二、在spring boot中的三种实现方式
2.1、代码
CustomServlet.java:
package com.example.demo.utils.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 自定义 servlet
*
*/
public class CustomServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("servlet get method");
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("servlet post method");
response.getWriter().write("hello world");
}
}
CustomFilter.java:
package com.example.demo.utils.filter;
import javax.servlet.*;
import java.io.IOException;
/**
* 自定义 filter
* Created by DELL on 2017/6/17.
*/
public class CustomFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init filter");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("do filter");
chain.doFilter(request, response);
}
@Override
public void destroy() {
System.out.println("destroy filter");
}
}
CustomListener.java:
package com.example.demo.utils.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* 自定义 listener
* Created by DELL on 2017/6/17.
*/
public class CustomListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("contextDestroyed");
}
}
2.2、方式一:通过注册ServletRegistrationBean、FilterRegistrationBean和ServletListenerRegistrationBean
2.2.1、注册ServletRegistrationBean
Application中注册bean:
/**注册CustomServlet*/
@Bean
public ServletRegistrationBean servletRegistrationBean() {
return new ServletRegistrationBean(new CustomServlet(), "/roncoo");
}
2.2.2、注册FilterRegistrationBean
Application中注册bean:
/**注册CustomFilter*/
@Bean
public FilterRegistrationBean filterRegistrationBean() {
return new FilterRegistrationBean(new CustomFilter(), servletRegistrationBean());
}
2.2.3、注册ServletListenerRegistrationBean
Application中注册bean:
/**注册CustomListener*/
@Bean
public ServletListenerRegistrationBean<CustomListener> servletListenerRegistrationBean() {
return new ServletListenerRegistrationBean<CustomListener>(new CustomListener());
}
上面所有例子效果:
项目启动:
访问:http://localhost:8080/roncoo
2.3、方式二:通过实现 ServletContextInitializer 接口直接注册
Application实现 ServletContextInitializer 接口:
package com.example.demo;
import com.example.demo.utils.filter.CustomFilter;
import com.example.demo.utils.listener.CustomListener;
import com.example.demo.utils.servlet.CustomServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import javax.servlet.DispatcherType;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import java.util.EnumSet;
@SpringBootApplication
public class SpringbootDemo27Application implements ServletContextInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.addServlet("customServlet", new CustomServlet()).addMapping("/roncoo");
servletContext.addFilter("customFilter", new CustomFilter()).addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), true, "customServlet");
servletContext.addListener(new CustomListener());
}
public static void main(String[] args) {
SpringApplication.run(SpringbootDemo27Application.class, args);
}
}
2.4、方式三:
在SpringBootApplication上使用@ServletComponentScan注解后,直接通过@WebServlet、@WebFilter、@WebListener注解自动注册
@ServletComponentScan
@SpringBootApplication
public class SpringbootDemo27Application {
//...
}
@WebServlet(urlPatterns = "/roncoo", name = "customServlet")
public class CustomServlet extends HttpServlet {
//...
}
@WebFilter(urlPatterns = "/*")
public class CustomFilter implements Filter {
//...
}
@WebListener
public class CustomListener implements ServletContextListener {
//...
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。