开发环境要求:
1. MyEclipse10.0或以上版本!
2. Tomcat7.0或以上版本!
String getName():获取表单项的名称,不是文件名称;获取上传文件名称,需要从Content-Disposition头中截取!
String getHeader(String header):获取指定头的值;
long getSize():获取上传文件的大小;
InputStream getInputStream():获取上传文件的流;
1. MyEclipse10.0或以上版本!
2. Tomcat7.0或以上版本!
3. JavaEE6.0应用!
1.注解代替web.xml配置文件
AServlet.java
package zh.servlet.demo; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(urlPatterns="/AServlet") public class AServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().print("AServlet"); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
AFilter.java
package zh.filter.demo; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; @WebFilter(urlPatterns={"/AServlet"}) public class AFilter implements Filter { @Override public void destroy() { System.out.println("AFilter挂了"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("AFIlter"); chain.doFilter(request, response); } @Override public void init(FilterConfig config) throws ServletException { System.out.println("AFilter出生了"); } }
AServletContextListener.java
package zh.listen.demo; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @WebListener public class AServletContextListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent arg0) { System.out.println("AServletContext挂了"); } @Override public void contextInitialized(ServletContextEvent arg0) { System.out.println("AServletContext出生了"); } }
启动Tomcat
访问:http://localhost:8080/JavaWeb2/AServlet
关闭Tomcat
2.对上传的支持
【注意】:首先给Servlet添加一个注解: @MultipartConfig
对于普通字段,使用request.getParameter("字段名")得到字段值。
对于文件类型,使用request.getPart("字段名"),得到Part实例,然后调用 Part实例方法,得到文件相关信息:
String getContentType():获取上传文件的MIME类型;String getName():获取表单项的名称,不是文件名称;获取上传文件名称,需要从Content-Disposition头中截取!
String getHeader(String header):获取指定头的值;
long getSize():获取上传文件的大小;
InputStream getInputStream():获取上传文件的流;
void write(String fileName):把上传文件保存到指定路径;
form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>文件上传</title> </head> <body> <form action="${pageContext.request.contextPath }/AServlet" method="post" enctype="multipart/form-data"> 用户名:<input type="text" name="username"><br> 简 历: <input type="file" name="resume"><br> <input type="submit" value="提交"> <input type="reset" value="重置"> </form> </body> </html>
AServlet.java
package zh.servlet.demo; import java.io.IOException; import java.io.PrintWriter; 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; @MultipartConfig // Servlet3.0支持文件上传的注解 @WebServlet(urlPatterns = { "/AServlet" }) public class AServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 解决中文提交乱码问题 request.setCharacterEncoding("utf-8"); // 解决中文响应乱码问题 response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); // 获取普通字段 String username = request.getParameter("username"); out.println(username + "<br>");// 杯莫停 // 直接通过文件字段名称,获取上传文件对象Part Part part = request.getPart("resume"); // 上传文件的字段名称 String name = part.getName(); out.println(name + "<br>");// resume // 上传文件类型 String contentType = part.getContentType(); out.println(contentType + "<br>");// image/jpeg // 上传文件大小 long size = part.getSize(); out.println(size + "<br>");// 33505 // 获取Content-Disposition头信息,可以从此头信息中截取文件名称 String header = part.getHeader("Content-Disposition"); out.println(header + "<br>");// form-data; name="resume";filename="杯莫停1.jpg" // 保存上传文件到指定路径 part.write("F://画江湖.jpg"); } }
访问:http://localhost:8080/JavaWeb2/form.jsp
提交后,结果: