注解
在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);
}
}