Servlet3.0新特性

注解

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

Servlet注解
在3.0规范中使用 @WebServlet() 注解注册 一个Servlet,该注解 中有多个属性:
在这里插入图片描述

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的名字 的字母 顺序 执行。该 注解常用 属性的类型 与 意义 如下表所示:
在这里插入图片描述
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);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值