Servlet3

本文深入解析Servlet3.0版本中引入的注解功能,包括@WebServlet、@WebFilter、@WebListener和@MultipartConfig等注解的使用方法及应用场景,探讨如何通过注解实现零配置和文件上传。

Servlet3.0注解知一二

1.Servlet3.0的优势:

  1. 新增的注解支持:该版本新增了若干注解,用于简化 Servlet、过滤器(Filter)和监听器(Listener)的声明,这使得 web.xml 部署描述文件从该版本开始不再是必选的,可以达到零配置,但现实中一般是注解+配置结合使用。
  2. 异步处理支持:大大减少了服务器资源的占用,并且提高了并发处理速度。
  3. 可插性支持:熟悉 Struts2 的开发者一定会对其通过插件的方式与包括 Spring 在内的各种常用框架的整合特性记忆犹新。将相应的插件封装成 JAR 包并放在类路径下,Struts2 运行时便能自动加载这些插件。现在 Servlet 3.0 提供了类似的特性,开发者可以通过插件的方式很方便的扩充已有 Web 应用的功能,而不需要修改原有的应用。

2.常用注解:

(1) @WebServlet: 在Servlet3.0中,可以使用 @WebServlet 注解将一个继承于 javax.servlet.http.HttpServlet 的类标注为可以处理用户请求的 Servlet,无需配置 web.xml。

@WebServlet(name = "servlet01",value = "/s01")

也可以配置多个 urlPatterns 来指定多个访问路径

@WebServlet(name = "servlet01",urlPatterns = {"/s01","/s001"})

**(2) @WebFilter:**用来配置过滤器(使用注解时:过滤器链按照类名的字母排序(大部分情况))

@WebFilter(filterName = "filter01",urlPatterns = "/*")

(3)@WebListener: Servlet3.0 提供 @WebListener 注解将一个实现了特定监听器接口的类定义为监听器;

@WebListener

(4)@MultipartConfig: 使用注解 @MultipartConfig 将一个 Servlet 标识为支持文件上传。Servlet3.0 将 multipart/formdata 的 POST 请求封装成 Part,通过 Part 对上传的文件进行操作。

3)通过注解实现文件上传:

(1)前台:

注意事项:

1.请求方式post
2.enctype=“multipart/form-data”

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>上传文件</title>
</head>
<body>
<form action="/Test0909/upload" method="post" enctype="multipart/form-data">
	用户名:<input type="text" name="uname" /><br/>
	头像:<input type="file" name="imageFile" /><br/>
	<input type="submit" value="保存" />
</form>
</body>
</html>
(2)后台:

1.实现步骤:

1、得到Part文件对象,request.getPart(String name); name对应前台文件输入框的name属性的值

2、得到文件上传真实路径 path

3、输出文件 part.write(path)

2.注意事项:

1.一定要加上注解 @MultipartConfig

package com.mage.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;

@WebServlet("/upload")
@MultipartConfig
public class Upload extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String uname = request.getParameter("uname");
		System.out.println("用户名:" + uname);
		// 1、得到 文件 part 对象
		Part part = request.getPart("imageFile");
		
		// 得到上传文件名称
		String submittedFileName = part.getSubmittedFileName();
		System.out.println(submittedFileName);
		// 2、得到文件上传路径
		String realPath = request.getServletContext().getRealPath("/upload/" + submittedFileName);
		// 3、输出文件
		part.write(realPath);
	}

}

(3)运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值