您的位置:首页 > 编程语言 > Java开发

springboot-11-servlet, listener, fitlter的添加

2017-11-03 14:33 435 查看
springboot中添加servlet, filter, listener有2种方式: 代码注册servlet 和自动注解注册(在使用druid监控有使用过)

代码注册通过ServletRegistrationBean、 FilterRegistrationBean 和 ServletListenerRegistrationBean 获得控制。 也可以通过servletContextInitializer接口直接注册

在 SpringBootApplication 上使用@ServletComponentScan注解后,Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码。

编写测试类: 


Servlet:

1), 使用代码注册的方式

package com.iwhere.test.web.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

/**
* 通过代码注册servlet
* 代码注册通过ServletRegistrationBean、 FilterRegistrationBean 和 ServletListenerRegistrationBean 获得控制。
也可以通过实现 ServletContextInitializer 接口直接注册。
* @author wenbronk
* @time 2017年3月17日  下午2:23:21  2017
*/

public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 6272693061640286219L;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doGet(req, resp);
System.out.println("method deGet is run");
doPost(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doPost(req, resp);
System.out.println("method doPost is run");

resp.setContentType("text/html");
PrintWriter out = resp.getWrite
4000
r();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>这是:MyServlet1</h1>");
out.println("</body>");
out.println("</html>");
}

}


然后在 App.java (或者任意一类中, 该类必须@component被spring管理) 

/**
* 使用代码注册Servlet
* 此方法不需要加注解  @ServletComponentScan
* @return
*/
@Bean
public ServletRegistrationBean myServlet() {
return new ServletRegistrationBean(new MyServlet(),"/myServlet/*");
}


2), 使用注解的方式实现: 

package com.iwhere.test.web.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

/**
* 使用注解的方式注册servlet
*
* @author wenbronk
* @time 2017年3月17日 下午4:10:33 2017
*/

@WebServlet(urlPatterns = "/myServlet2/*", description = "Servlet注解方式")
public class AnnotionServlet extends HttpServlet {
private static final long serialVersionUID = 1121465382990088487L;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doGet(req, resp);
System.err.println("do Get");
doPost(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doPost(req, resp);
System.err.println("do post");

resp.setContentType("text/html");
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>这是:myServlet2</h1>");
out.println("</body>");
out.println("</html>");
}

}


测试: 可通过http://localhost:8080/springboot-learn/myServlet进行访问: (有加context配置)



 


Filter的配置:

此处只讲注解方式, 代码方式和servlet一样

package com.iwhere.test.web.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;

/**
* 使用注解的方式创建filter, 实现一个filter接口
* 必须加注解@ServletComponentScan
* @author wenbronk
* @time 2017年3月17日  下午4:48:19  2017
*/

@WebFilter(filterName="myFilter", urlPatterns="/*")
public class MyFilter implements Filter {

@Override
public void destroy() {
System.out.println("filter is destroy");
}

@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
System.out.println("running filter");
arg2.doFilter(arg0, arg1);
}

@Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println("filter is init");
}

}


 

 


listener

listener有contextListener, sessionListener,pageListener, beanListener 好多种

servletContextListener;

package com.iwhere.test.web.listener;

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

/**
* 使用注解的方式实现Contextlistener, 必须实现listener接口
*
* @author wenbronk
* @time 2017年3月17日  下午4:51:24  2017
*/
@WebListener
public class MyListener implements ServletContextListener{

@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("servletContext destroyed");
}

@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("servletContext init");
}

}


sessionListener

package com.iwhere.test.web.listener;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
* sessionListener, 监听session的创建和销毁
* @author wenbronk
* @time 2017年3月17日  下午4:56:22  2017
*/
@WebListener
public class MySessionListener implements HttpSessionListener {

@Override
public void sessionCreated(HttpSessionEvent arg0) {
System.out.println("HttpSession created");
}

@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println("HttpSession destroyed");

}

}


 


补充一点, 在listener中使用 springboot的 工厂

mongoTemplate = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext()).getBean(MongoTemplate.class);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet filter