美文网首页
JAVA Web学习(13)___第9章 过滤器和监听器

JAVA Web学习(13)___第9章 过滤器和监听器

作者: 岁月静好浅笑安然 | 来源:发表于2019-08-21 13:19 被阅读0次

    9.2.4 HTTP会话监听

      1. HttpSessionListener 接口
      • contextDestroyed(ServletContextEvent arg0)通知正在收听的对象,session已经被加载及初始化
      • contextInitialized(ServletContextEvent arg0)通知正在收听的对象,session已经被载出及初始化

    9.2.5 Servlet请求监听

    • 1.ServletRequestListener 接口
      • requestDestroyed(ServletRequestEvent arg0) 通知正在收听的对象,ServletRequest已经被载出
        *requestInitialized(ServletRequestEvent arg0)通知正在收听的对象, ServletRequest已经被加载及初始化

    9.2.6 Servlet监听器统计在线人数

    9.3 Servlet 3.0新特性

    使用注释就无须在web.xml文件中对 Servlet或者过滤器中配置,@ WebServlet@WebFilter@WebListener和@WebInitParam

    9.3.1 新增注释

    • 1.@WebServlet
    属性名 类型 描述
    name String 等价于<servlet-name>
    value String[] 等价urlPatterns
    urlPatterns String[] 等价<url-pattern>
    loadOnStartup int 指定 Servlet加载顺序,等价<load-on-startup>
    initParams WebInitParam[] 等价<init-param>
    asyncSupporte Boolean 声明 Servlet是否支持异步操作,等价于<async-supported>
    description String 该 Servlet的描述信息,等价于<description>
    displayName String 该 Servlet的显示名,等价<display-name>

    示例代码

    @WebServlet(name="BookServlet",urlPatterns="/BookServlet")
    public class BookServlet extends HttpServlet {
    ...
    }
    
    • 2.@WebFilter
    属性名 类型 描述
    filterName String 等价于<filter-name>
    value String[] 等价urlPatterns
    urlPatterns String[] 等价<url-pattern>
    servletNames String[] 等价于<servlet-name>
    initParams WebInitParam[] 等价<init-param>
    asyncSupporte Boolean 声明 过滤器是否支持异步操作,等价于<async-supported>
    description String 该 过滤器的描述信息,等价于<description>
    displayName String 该 过滤器的显示名,等价<display-name>
    dispatcherTypes String 指定过滤器的转发模式,具体取值包括ASYNCERRORFORWARDINCLUDEREQUEST

    示例代码

    @WebFilter(filterName="AddFilter",urlPatterns="/*") 
    public class AddFilter implements Filter {
    ...
    }
    
    • 3.@WebListener
    • 4.@WebInitParam
    属性名 类型 描述
    name String 等价于<param-name>
    value String[] 等价<param-value>
    description String[] 等价<description>

    示例代码

    @WebFilter(filterName="AddFilter",urlPatterns="/*",initParams=@WebInitParam(name="encoding",value="UTF-8")}) 
    public class AddFilter implements Filter {
    ...
    }
    

    9.3.2 对文件上传的支持

    • 需要添加 @MultipartConfig注解
    • 从request对象中获取Part文件对象
    属性名 类型 是否可选 描述
    fileSizeThreshold Int 当数据量大于该值时,内容被写入文件
    location String 存放生成的文件地址
    maxFileSize Long 允许上传的文件最大值,默认值为-1,表示没有限制
    maxRequestSize Long 针对multipart/forn-data请求的最大值,默认为-1,表示没有限制
    • Part getPart(String name)
    • Colletion<Part> getParts()
      示例代码
    • index.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>文件上传演示</title>
          </head>
      
      <body>
       <form action="UploadServlet" method="post" enctype="multipart/form-data">
       选择文件<input type="file" name="file1" id="file1"/><br>
       <input type="submit"value="上传" name="upload"/>
        
       
       </form>
      </body>
    </html>
    
    
    • UploadServlet.java
    package com.hwp;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    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("/UploadServlet")
    @MultipartConfig
    public class UploadServlet extends HttpServlet {
        
        private static final long serialVersionUID = 1L;
    
        @Override
        protected void doPost(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
    
            // 获取文件上传组件
            Part part = request.getPart("file1");
    
            // 获取文件的路径
            String header = part.getHeader("content-disposition");
            System.out.println(header);
            String path = header.substring(header.indexOf("filename=") + 10,
                    header.length() - 1);
    
            // 获取文件名
            String name = getRealName(path);
    
            // 获取文件的存放目录
            String dir = getDir(name);
    
            String realPath = this.getServletContext().getRealPath("/upload" + dir);
            File file = new File(realPath);
            if (!file.exists()) {
                file.mkdirs();
            }
    
            // 对拷流
            InputStream inputStream = part.getInputStream();
            FileOutputStream outputStream = new FileOutputStream(new File(file,
                    name));
            int len = -1;
            byte[] bytes = new byte[1024];
            while ((len = inputStream.read(bytes)) != -1) {
                outputStream.write(bytes, 0, len);
            }
    
            // 关闭资源
            outputStream.close();
            inputStream.close();
    
            // 删除临时文件
            part.delete();
    
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().print("文件" + name + "上传成功!");
        }
        /**
         * 
         */
        /**
         * 根据文件的路径获取文件真实名称
         * 
         * @param path
         *            文件的路径
         * @return 文件名称
         */
        public static String getRealName(String path) {
            int index = path.lastIndexOf("\\");
    
            if (index == -1) {
                index = path.lastIndexOf("/");
            }
    
            return path.substring(index + 1);
        }
    
        /**
         * 根据文件名返回一个目录
         * 
         * @param name
         *            文件名称
         * @return 目录
         */
        public static String getDir(String name) {
            int i = name.hashCode();
            String hex = Integer.toHexString(i);
            int j = hex.length();
    
            for (int k = 0; k < 8 - j; k++) {
                hex = "0" + hex;
            }
    
            return "/" + hex.charAt(0) + "/" + hex.charAt(1);
        }
    
    
    }
    
    

    9.3.3 异步处理

    配置asyncSupported=true

    @WebFilter(urlPatterns="MyFilter",asyncSupported=true)
    public class MyFilter implements Filter{
    
        ...
    }
    

    相关文章

      网友评论

          本文标题:JAVA Web学习(13)___第9章 过滤器和监听器

          本文链接:https://www.haomeiwen.com/subject/qjpbsctx.html