springboot(3):整合Servlet,filter,listener

2019-09-17 10:23:44来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

springboot(3):整合Servlet,filter,listener

1.springboot整合Servlet(2种方式)

添加maven依赖:spring-boot-starter-web

1>通过注解扫描完成Servlet组件的注册(方式1)

步骤:需要3步

1)自定义一个继承javax.servlet.http.HTTPServlet类的CustomServlet,并实现doGet()或doPost()方法。

2)在CustomServlet类上添加注解@WebServlet:

@WebServlet(name="customServlet",urlPatterns={"/"}) 

该注解的作用等同于下面的传统的Servlet配置

<servlet>

   <servlet-name>customServlet</servlet-name>   <servlet-class>zxp.CustomServlet</servlet-class> </servlet> <servlet-mapping>    <servlet-name>customServlet</servlet-name>    <url-pattern>/</url-pattern> </servlet-mapping>

3)在启动类上添加注解@ServletConComponentScan,该注解在启动的时候会扫描@WebServlet,并将该类实例化。

2>通过配置类注册bean完成Servlet组件的注册(方式2)

步骤:需要2步

1)自定义一个继承javax.servlet.http.HTTPServlet类的CustomServlet,并实现doGet()或doPost()方法。

2)在启动类或自定义配置类中定义以下方法用于注册Servlet:

@Bean public ServletRegistrationBean getServletRegistrationBean(){   ServletRegistrationBean bean = new ServletRegistrationBean(new CustomServlet());   bean.addUrlMappings("/second");   return bean; } 注意:必须使用ServletRegistrationBean。  

2.springboot整合Filter(2种方式)

1>通过注解扫描完成Filter组件的注册(方式1)

步骤:需要3步

1)自定义一个实现javax.servlet.Filter接口的CustomFilter,并实现doFilter方法。

2)在CustomServlet类上添加注解@WebFilter。

@WebFilter(name="customFilter",urlPatterns={"*/user"}) 

该注解的作用等同于下面的传统的Filter配置

<filter>    <filter-name>customFilter</filter-name>    <filter-class>zxp.customFilter</filter-class> </filter> <filter-mapping>    <filter-name>customFilter</filter-name>   <url-pattern>/user</url-pattern> </filter-mapping>

3)在启动类上添加注解@ServletConComponentScan,该注解在启动的时候会扫描@WebServlet,并将该类实例化。

2>通过配置类注册bean完成Servlet组件的注册(方式2)

步骤:需要2步

1)自定义一个实现javax.servlet.Filter接口的CustomFilter,并实现doFilter方法。

2)在启动类或自定义配置类中定义以下方法用于注册Filter:

@Bean public FilterRegistrationBean getFilterRegistrationBean(){   FilterRegistrationBean bean = new FilterRegistrationBean(new CustomFilter());   bean.addUrlMappings("/user");   return bean; } 注意:了解FilterRegistrationBean类。

3.springboot整合Listener(2种方式)

具体要监听哪些组件就实现相应的监听器接口,这里实现的是ServletContextListener接口。

1>通过注解扫描完成Listener组件的注册(方式1)

步骤:需要3步

1.自定义一个实现javax.servlet.ServletContextListener接口的CustomListener。

2)在CustomListener类上添加注解@WebListener,不需要设置参数。

3)在启动类上添加注解@ServletConComponentScan,该注解在启动的时候会扫描@WebServlet,并将该类实例化。

2>通过配置类注册bean完成Listener组件的注册(方式2)

步骤:需要2步

1)自定义一个实现javax.servlet.Filter接口的CustomFilter,并实现doFilter方法。

2)在启动类或自定义配置类中定义以下方法用于注册Listener:

@Bean public ServletListenerRegistrationBean getServletListenerRegistrationBean(){   ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new CustomListener());   return bean; } 注意:了解ServletListenerRegistrationBean类。

3.springboot可以直接访问的静态资源

springboot可以直接访问的静态资源的路径必须符合以下两种情况:

1.静态资源位于classpath/static

该路径在myeclipse的web项目中就是src/main/resources目录下的static文件夹。

注意:目录名必须为static。

2.静态资源位于ServletContext的根目录下

该路径在myeclipse的web项目中就是src/main/webapp目录下。

4.文件上传

文件上传需要2个jar: commons-fileupload-1.3.3.jar和commons-io-2.6.jar

步骤:

1.创建控制器Controller。

由于需要通过访问指定的URL实现文件上传,因此需要创建controller类,在该类在创建处理上传的方法。

2.定义处理文件上传的方法。

/* * 处理文件上传 */

@RequestMapping(value="/upload")
public String testUpload(@RequestParam("file") MultipartFile file) throws IOException{
  /*将文件上传到服务器的哪里*/
  InputStream in=file.getInputStream();
  String fileName=file.getOriginalFilename();
  byte[] b=new byte[1024];

  OutputStream out=new FileOutputStream("E:\\"+fileName);
  int len=-1;
  /*将文件以字节流的形式写到文件中*/
  while((len=in.read(b))!=-1){
    out.write(b, 0, len);
  }
  out.close();
  in.close();
  System.out.println("上传成功");
  return "success";  //跳转到成功页面
}

代码中的注解@RequestParam的参数file指的是form表单中的参数,至此文件上传的处理已经完成了。

3.在HTML或jsp页面中创建上传文件的表单。

<h3>以下表单用于测试文件上传功能</h3>
<!-- 文件上传只能使用post方式,且enctype的值必须为multipart/form-data -->
<form action="test/upload" method="post" enctype="multipart/form-data">
文件:<input name="file" type="file"><br>
<input type="submit" value="文件上传">
</form>

至此文件上传的功能已经完成了。

上面完成的只是基础的文件上传,并未设置文件单次上传的大小以及上传文件的总量。

接下来在application.properties配置文件中配置上传的属性:

#设置单个文件上传的大小

spring.http.multipart.maxFileSize=200MB

#设置一次请求上传文件的总容量

spring.http.multipart.maxRequestSize=400MB


原文链接:https://www.cnblogs.com/z-x-p/p/11499065.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Java网络编程 -- Netty入门

下一篇:看一下“Dubbo 2.7”的三大新特性