Servelt3.0特性

Servlet3.0新特性

注解

在JavaEE6规范中 添加了Servlet3.0规范中,该规范 允许在 定义 Servlet、Filter与Listener三大组件时使用注解,而不用再web.xml进行注册了。Servlet3.0 规范 允许web项目 没有web.xml配置文件。

Servlet注解

在3.0规范中使用 @WebServlet() 注解注册 一个Servlet,该注解 中有多个属性:

属性名 类型 说明
urlPatterns String[] 相当于url-pattern的值
value String[] 与urlPatterns相同,但是不能同时使用
name String 相当于ServeltName的值
loadOnStartup int 默认值为-1
initParams WebInitParam[] 相当于init-param标签.其类型为另一个注解WebInitParam数组
package com.monkey1024.servlet;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 使用注解注册Servlet
 */
@WebServlet(value= {"/servlet1","/abc/servlet1"},
            name="servletname1",
            loadOnStartup=2,
            initParams= 
                        {@WebInitParam(name="teacher",value="monkey1024")})
public class ServletTest01 extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletConfig servletconfig = this.getServletConfig();
        //获取Servlet名称
        String servletName = servletconfig.getServletName();
        System.out.println(servletName);
        
        //获取初始化参数
        Enumeration<String> params = servletconfig.getInitParameterNames();
        while(params.hasMoreElements()) {
            String name = params.nextElement();
            String value = servletconfig.getInitParameter(name);
            System.out.println(name+"  "+  value);
        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

Filter注解

在3.0规范中使用 @WebFilter()注解 来注册 当前的Filter类。目前使用 注解无法指定 filter的执行顺序,其 会 默认 根据 filter的名字 的字母 顺序 执行。该 注解常用 属性的类型 与 意义 如下表所示:

属性名 类型 说明
urlPatterns String[] 相当于url-pattern的值
value String[] 与urlPatterns相同,但是不能同时使用
filterName String 相当于FilterName的值
servletName String[] 相当于filet-mapping的子标签servlet-name,用于指定要过滤的servelt名称
initParams WebInitParam[] 相当于init-param标签.其类型为另一个注解WebInitParam数组

Listener注解

Servlet3.0规范中使用 @WebListener()注解来注册当前的Listener类。在web工程中创建好 Listener后,直接 在类上 添加 @WebListener注解 即可完成Listener的注册。

Servlet3.0新特性之文件上传

Servlet提供了专门的文件 上传API。HttpServletRequest的getPart()方法 可以完成 单个文件上传,而getParts()方法 可以 完成多个文件上传。需要注意多得是,这 两个方法 是从 Servlet3.0 开始定义的。

getPart
方法: Part getPart(String name) throws IOException,ServletException
作用:获取Multipart请求中指定名称的“部分”。一般 这里的 参数 是上传 表单 中 的"file"表单项的name值。

getParts
作用:获取Multipart请求中的所有部分。多文件上传时使用 该方法。

Servlet3.0在javaX.servlet.http包中 新增了 Part 接口,该接口中常用的方法有:
write
方法:void write(String fileName)
作用:将上传文件数据写到指定的文件中。

另外在Servlet3.1中的Part接口 里面新增了getSubmittedFileName方法 用来获取上传的文件名:

代码实例:
创建Servlet时,需要 在Servlet中添加 一个@MultipartConfig注解,表示当前Servlet可以处理 Multipart请求。

package com.monkey1024.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

/**
 * Servlet3.1 实现文件上床
 */
@WebServlet("/upload")
@MultipartConfig //表示当前servlet可以处理multipart请求
public class UploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String path = this.getServletContext().getRealPath("/upload");
            //获取上传文件
            Part part = request.getPart("photo");
            //获取上传文件的名字,该方法 是 3.1版本中的
            String name = part.getSubmittedFileName();
            //将上传的文件写入到指定的服务器路径中
            part.write(path+"/"+name);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容