文件上传和过滤器总结

文件上传

一、文件上传表单跟普通表单的区别

  1. 属性:文件上传表单需要加上ecntype=“mutlipart/from-data”,普通表单不需要指定ecntype属性;
  2. 请求方式:文件上传表单只能通过post提交表单,而普通表单可以post或get方法
  3. 提交:提交文件上传表单时,每个表单项都有自己独立的头信息;而普通表单项的头信息都是相同的;
  4. 获取:文件上传表单:不能通过request,getParameter方法获取表单数据,只能通过getinputStream获取表单。

二、操作步骤:

  1. 导入upload的相关jar包

    common-upload—.jar

    common-io—.jar

  2. 创建DiskfileitemFactory对象,该对象用于创建fileitem

  3. 创建ServletUpload对象解析器,该对象用于解析request请求

  4. 调用ServletUpload对象的parseRequest()方法解析request请求

  5. 解析产生的fileitem是一个list集合,遍历集合

  6. 遍历集合后就判断结果是否为普通表单,用isformfield()方法判断

    若为普通表单,则直接用fileitem.getString(“utf-8”)输出。

  7. 若不是普通表单,判断是否是图片,isvalid(fileitem)true为是图片

    if(!isvalid(fileitem)){ request.setAttribute( “提示的地方”,“只能上传图片” );

    request.getRequestDispatcher("/uoload.jsp").forward(request,respone); return;//结束当前方法的执行}

    还可以判断大小……(可以通过servletFileUpload对象的setFileSizeMax方法,指定上传文件的大小…)

  8. 是图片,InputStream inputstream = fileitem.getInputStream();//获取上传文件的输入流

    String name=fileitem.getName();//得到图片的名字

    //定义保存图片的路径( getservletcontext.getrealpath得到真实路径,即当前项目的发布路径)

    String uploadPath = request.getServletContext.getRealPath("/WEB-INF/upload");

    //创建FileoutputStream对象,并读取图片数据,写入for输出流中

    FileoutputStream fos = new FileoutputStream(uploadPath+"/"+name);

    //创建一个缓冲区

    Byte[] buf = new Byte[1024];

    int len = inputstream.read(buf);//读取一定数量的字节,将其存储在缓冲区buf中

    while(len !=-1){ 当inputstream读到文件末尾而没有可用字节,则返回值-1

    fos.write(buf,0,len);//将从buf数组中从0开始的len个字节写入此输出流

    len = inputStream.read(buf);//继续读取,将其存储在缓冲区buf中

    }

    //关闭资源

    fos.close( );

    ##isvalid()方法:

    /**

    • 判断FileItem文件表单项是否是图片,如果是就返回true,否则返回false。
    • @param fi
    • @return
      */
      public boolean isValid(FileItem fi) {
      String contentType = fi.getContentType(); //例如:image/jpeg
      String regex = “image/[a-zA-Z]{3,4}”; //验证图片的正则
      return contentType.matches(regex);
      }

过滤器

servlet的三大组件之一。如果配置过滤器,那么当请求某一个Servlet的时候,先会进入过滤器中。只有过滤器执行了放行操作的时候,才会继续请求目标的servlet。

使用过滤器的步骤:

第一步:创建一个过滤器,实现filter接口,重写dofilter方法

第二步:配置web.xml文件

<filter>
	<filter-name>过滤器名</filter-name>
	<filter-class>过滤器包名</filter-class>
</filter>

<filter-mapping>
	<filter-name>过滤器名</filter-name>
	<url-pattern>/hello</url-pattern>//当用户请求/hello的时候,首先进入过滤器。
</filter-mapping>

FilterConfig

该对象用于获取filter的配置参数。

在init()方法中
//获取过滤器参数
name = filterConfig.getInitParameter("name");

我们可以在filter节点中指定配置参数
<init-param>
	<param-name>name</param-name>
	<param-value>jacky</param-value>
</init-param>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值