SpringBoot 无XML的相关配置
来源:互联网 发布:seo实战密码百度云 编辑:程序博客网 时间:2024/05/21 17:56
SpringBoot 无XML的相关配置
Setting context-params
在Servlet 2.0
是在web.xml来设置context-params
<context-param> <param-name>facelets.DEVELOPMENT</param-name> <param-value>true</param-value></context-param>
在基于Servlet 3.0
的SpringBoot上可使用
@Configuration@ComponentScan@EnableAutoConfigurationpublic class Application implements ServletContextInitializer { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override public void onStartup(ServletContext servletContext) throws ServletException { servletContext.setInitParameter("facelets.DEVELOPMENT", "true"); }}
添加Interceptor
import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;@Configurationpublic class MyWebAppConfigurer extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { // 多个拦截器组成一个拦截器链 // addPathPatterns 用于添加拦截规则 // excludePathPatterns 用户排除拦截 registry.addInterceptor(new MyInterceptor1()).addPathPatterns("/**"); registry.addInterceptor(new MyInterceptor2()).addPathPatterns("/**"); super.addInterceptors(registry); }}
Tips:Filter与Interceptor的区别
- 使用范围不同:Filter是Servlet规范规定的,只能用于Web程序中。而拦截器既可以用于Web程序,也可以用于Application、Swing程序中。
- 规范不同:Filter是在Servlet规范中定义的,是Servlet容器支持的。而拦截器是在Spring容器内的,是Spring框架支持的。
- 使用的资源不同:同其他的代码块一样,拦截器也是一个Spring的组件,归Spring管理,配置在Spring文件中,因此能使用Spring里的任何资源、对象,例如Service对象、数据源、事务管理等,通过IoC注入到拦截器即可;而Filter则不能。
- 深度不同:Filter在只在Servlet前后起作用。而拦截器能够深入到方法前后、异常抛出前后等,因此拦截器的使用具有更大的弹性。所以在Spring构架的程序中,要优先使用拦截器。
浏览器发起请求执行顺序
Client -> Listener -> ServletContainer -> Filter -> Servlet -> Interceptor
添加Servlet、Filer、Listener
在SpringBootApplication上使用@ServletComponentScan注解后,Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,无需其他代码。
启动扫描
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.servlet.ServletComponentScan;@SpringBootApplication//这个就是扫描相应的Servlet包;@ServletComponentScanpublic class SiteConfig { public static void main(String[] args) { SpringApplication.run(SiteConfig.class, args); }}
import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;@WebServlet(urlPatterns="/myServlet/*", description="Servlet的说明")public class MyServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(">>>>>>>>>>doGet()<<<<<<<<<<<"); doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(">>>>>>>>>>doPost()<<<<<<<<<<<"); resp.setContentType("text/html;charset=UTF-8"); PrintWriter out = resp.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hello World</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>这是:MyServlet</h1>"); out.println("</body>"); out.println("</html>"); }}
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;import java.io.IOException;/*** 使用注解标注过滤器* @WebFilter将一个实现了javax.servlet.Filter接口的类定义为过滤器* 属性filterName声明过滤器的名称,可选* 属性urlPatterns指定要过滤的URL模式,也可使用属性value来声明.(指定要过滤的URL模式是必选属性)*/@WebFilter(filterName = "myFilter", urlPatterns = "/*")public class MyFilter implements Filter { @Override public void init(FilterConfig config) throws ServletException { System.out.println("过滤器初始化"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("执行过滤操作"); chain.doFilter(request, response); } @Override public void destroy() { System.out.println("过滤器销毁"); }}
import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.annotation.WebListener;/*** 使用@WebListener注解,实现ServletContextListener接口*/@WebListenerpublic class MyServletContextListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent arg0) { System.out.println("ServletContex销毁"); } @Override public void contextInitialized(ServletContextEvent arg0) { System.out.println("ServletContex初始化"); }}
代码注册通过ServletRegistrationBean、FilterRegistrationBean和ServletListenerRegistrationBean获得控制。
@Bean public FilterRegistrationBean sessionFilter() { FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new HttpSessionFilter()); return bean; }
可以通过实现ServletContextInitializer接口直接注册。
@Override public void onStartup(ServletContext servletContext) throws ServletException { // Servlet ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(dispatcherContext)); dispatcher.addMapping("/"); dispatcher.setLoadOnStartup(1); dispatcher.setInitParameter("defaultHtmlEscape", "true"); // Filter FilterRegistration.Dynamic filter = container.addFilter("encodingFilter", CharacterEncodingFilter.class); filter.addMappingForUrlPatterns(null, false, "/*"); filter.setInitParameter("encoding", "UTF-8"); filter.setInitParameter("forceEncoding", "true"); // Listener servletContext.addListener(TestServletContextListener.class); super.onStartup(servletContext); }
阅读全文
0 0
- SpringBoot 无XML的相关配置
- SpringBoot整合Dubbox(无XML配置)
- Springboot多realm集成,无ini文件,无xml配置
- SpringBoot学习笔记(四) SpringBoot Web相关的自动配置
- Springboot的核心及相关配置
- springboot相关配置
- SpringBoot--MVC相关配置
- SpringBoot 配置 web.xml
- springboot 引入xml配置
- web.xml的相关配置
- animation的XML相关配置
- XML文件的相关配置
- springMVC的xml相关配置
- springboot学习二(springboot相关配置)
- SpringBoot17-springboot的Web开发-Web相关配置
- SpringBoot相关的知识点
- SpringBoot集成MyBatis时要配置的Mapper中的xml
- java鬼混笔记:springboot 10、springboot logback-spring.xml简单的日志配置
- 工商企业数据-企信宝-天眼查-企查查360度深度分布式爬虫技术破解
- 编译错误之error C3861: “xxxx”: 找不到标识符
- 网站开发之如何优化及推广
- Android Studio 导入项目的时候出现Failed to sync Gradle project
- java和RRedis写入的小demo
- SpringBoot 无XML的相关配置
- mysql like子句 多条件查询
- 解决spring-boot项目中无法读取yml配置文件属性问题
- 如何将本地项目上传到Github
- window使用之子窗口引用父窗口对象
- 增加根节点
- 初试TensorFlow之安装Linux虚拟机
- JavaScript 创建对象--构造函数模式
- MySQL数据库的发展史