Java 微服务实践 - Spring Boot 系列(四)Web篇(下)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值