1 Servlet on spring boot
原生的servlet使用,需要在xml中写servlet servletmapping来完成注册使用的
在spring boot中是基于注解标签使用的
创建一个myservlet继承httpservlet
给类添加一个标签 @WebServlet
给启动类添加上扫描servlet的包
@WebServlet(
name = "myServlet",
urlPatterns = "/myservlet",
initParams = {
@WebInitParam(name = "myname", value = "myvalue")
}
)
public class myservlet extends HttpServlet{
private static final long serialVersionUID = 1L;
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
Writer writer = response.getWriter();
writer.write("<html><body>Hello,World</body></html>");
}
}
启动类
@SpringBootApplication
@ServletComponentScan(basePackages = {"com/lxx/springbootlession04/servlet"})
public class SpringBootLession04Application {
public static void main(String[] args) {
SpringApplication.run(SpringBootLession04Application.class, args);
}
}
浏览器访问
2 Filter on spring boot
过滤器,可以对一个servlet过滤也可以对多个servlet过滤
@WebFilter(urlPatterns = "/myservlet")
//既可以根据名称对一个servlet过滤,也可以通过uripatterns对多个servlet映射
//@WebFilter(servletNames="myServlet")
public class MyFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
ServletContext servletContext = request.getServletContext();
servletContext.log("/myservlet was filtered!");
filterChain.doFilter(request, response);
}
3 Listener on spring boot
监听器使用,同理 实现某个监听器接口实现监听回调的方法
@WebListener
public class MyServletRequestListener implements ServletRequestListener {
@Override
public void requestInitialized(ServletRequestEvent sre) {
HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
ServletContext servletContext = request.getServletContext();
servletContext.log("request was initialized!");
}
@Override
public void requestDestroyed(ServletRequestEvent sre) {
HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
ServletContext servletContext = request.getServletContext();
servletContext.log("request was destroyed!");
}
上述都是通过spring-boot的注解方式实现
springboot还支持api创建servlet filter listener
@Bean
public static ServletRegistrationBean servletRegistrationBean() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
servletRegistrationBean.setServlet(new MyServlet2());
servletRegistrationBean.setName("my-servlet2");
servletRegistrationBean.addUrlMappings("/spring-boot/myservlet2");
servletRegistrationBean.addInitParameter("myname", "myvalue");
return servletRegistrationBean;
}
@Bean
public static FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new MyFilter2());
filterRegistrationBean.addServletNames("my-servlet2");
filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.INCLUDE);
return filterRegistrationBean;
}
@Bean
public static ServletListenerRegistrationBean servletListenerRegistrationBean() {
ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean();
servletListenerRegistrationBean.setListener(new MyServletRequestListener());
return servletListenerRegistrationBean;
}
同时如果filter方法中没有request怎么获取request对象 RequestContextListener类 springboot 会自动帮我们注册这个容器
public class MyFilter2 extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
doSomething();
// String requestURI = request.getRequestURI();
// ServletContext servletContext = request.getServletContext();
// servletContext.log(requestURI + " was filtered!");
filterChain.doFilter(request, response);
}
//如果方法中没有request怎么获取request对象 RequestContextListener springboot 会自动帮我们注册这个容器
public void doSomething() {
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
HttpServletRequest request = servletRequestAttributes.getRequest();
ServletContext servletContext = request.getServletContext();
String requestURI = request.getRequestURI();
servletContext.log(requestURI + " was filtered!");
}
}
springboot中默认不支持jsp的,如果需要实现支持jsp
1 继承SpringBootServletInitializer
激活 传统Servlet Web部署
Spring Boot 1.4.0 开始
org.springframework.boot.web.support.SpringBootServletInitializer
2 组装 org.springframework.boot.builder.SpringApplicationBuilder
3
.配置JSP视图
org.springframework.boot.autoconfigure.web.WebMvcProperties
spring.mvc.view.prefix
spring.mvc.view.suffix
4 配置pom引入jsp渲染引擎 jstl
<!-- JSP 渲染引擎 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<!-- JSTL -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
5 修改为war包
了解spring.framework