servlet3.0 新特性

目录:

一、注释

二、更简便的文件上传

三、异步处理

 

一、注释

之前很多东西都需要在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中配置,则是:true

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Java,Web)