目录:
一、注释
二、更简便的文件上传
三、异步处理
一、注释
之前很多东西都需要在web.xml中配置,非常麻烦,servlet3.0推出了注释,可以直接在类的声明前添加相应的注释,不同在web文件中配置了。
1. @WebServlet,举例:@WebServlet(name="自定义名字,不一定是类名",urlPatterns="/客户端请求该类时应该写什么")
关于urlPatterns的详解,请转至:https://www.cnblogs.com/51kata/p/5152400.html
2. @WebFilter,举例:@WebFilter(name="自定义名字",urlPatterns="/*")(urlPatterns="/*"表示任何请求都会先经过该过滤器)
3. @WebListener,WebListener不像其他注释那样,可以在括号里设置很多属性,它只有一个字符串注解,举例:@WebListener(“comments”)
4. @WebInitParam,需要初始化的参数,一般被包含在其他注释中,举例:@WebServlet(name="aaa",urlPatterns="/客*",initParams={@WebInitParam(name="usename",value="tom")})
二、更简便的上传文件
在servlet3.0之前,上传文件需要借助第三方jar组件,3.0实现了更简便的文件上传。这里用到了另一个注释:@MultipartConfig
上传步骤:
1. 添加@MultipartConfig注释,这个注释需要在@WebServlet注释之下,它有一些可以选择设置的属性值:
属性名 | 类型 | 描述 |
fileSiz3eThreshold | int | 当数据量大于该值时,内容将被写入文件 |
location | String | 存放生成的文件地址 |
maxFileSize | long | 允许上传的文件最大值,默认-1,不限制大小 |
maxRequestSize | long | 针对该Multipart/form-data请求的最大数量,默认-1,不限制大小 |
2. 从request对象中,获得Part文件对象:getPart(String name)/getParts(),其中name表示请求的name文件。上传的文件用此part来表示,它提供了write()、delete()等方法。
使用举例,如果是图像,就存储起来:
String path = this.getServletContext().getRealPath("/");
Part p=request.getPart("file1"); //file1是jsp页面中上传文件的input框的name值if(p.getContextType().contains("image"))
{
ApplicationPart ap=(ApplicationPart)p;
//截取文件名
String name=ap.getFilename();
int path_idx=name.lastIndexOf("\\")+1;
String name1=name.substring(path_idx,name.length());
p.write(path+"/upload/"+name1);
}
三、异步处理
之前的servlet处理的工作流程是:接到请求后,进行一些预处理,调用业务接口的某些方法,以完成业务,最后提交结果。提交的请求是一个一个顺序执行的,一个还没响应的话,其他请求都处于阻塞状态。3.0的处理类似于流水线,在将请求转给业务接口后,就能接着预处理下一个请求,这样一个没有处理完,其他的请求也不会阻塞。
3.0默认是不适用异步处理的,需要使用异步处理时,只需要在注释中,将属性asyncSupported置为true,如果是在web.xml中配置,则是:<async-supported>true</async-supported>