第三方控件

第三方控件

1. 掌握文件上传

HTTP协议是基于TCP协议的一种超文本传输协议,用于通信。

客户端请求,服务端响应。

rfc 1867里提出了HTTP协议允许进行文件上传。

<input type="file"/>

commons-fileupload它就遵循了rfc 1867规范,进行了一系列文件上传封装。

  • 下载最新版的fileupload和io组件http://commons.apache.org/proper/commons-fileupload/

  • **客户端:**rfc1867规范中提到了想要做文件上传 必须保证请求方式为POST,内容类型(Content-Type)必须为multipart/form-data

    • 编写一个表单将其请求方式设置为POST
    • 将表单的属性enctype="multipart/form-data"(设置上它之后,数据的请求信息变化了,变为了文件项形式上传)
    • 设置一个文件域用于选择文件
  • 服务端:

    // 1.工厂
    // 接口:File文件Item项Factory工厂    用来进行文件项内容接收的 
    // 实现类:DiskFileItemFactory 
    // 常用的API:
    DiskFileItemFactory fif = new DiskFileItemFactory();
    // 设置上传过程中的文件缓冲区大小
    // fif.setSizeThreshold(sizeThreshold);
    // 设置上传过程中的临时文件存储位置
    // fif.setRepository(repository)
    
    // 2.产品
    // 接口FileItem  用来存储请求过来的文件项内容  文件项可能为文件表单 也可能为普通表单
    // 判断是否是普通表单
    // isFormFiled()
    // 获取文件名
    // getName()
    // 获取name属性值
    // getFiledName()
    // 获取value属性值
    // getString()   getString(String encoding)
    // 获取文件大小
    // getSize()
    // 文件存储  (上传到服务器的哪个位置)
    // write(File destFile)
    
    // 3.操作工
    // ServletFileUpload
    // 设置上传文件的总大小
    // setSizeMax(long 字节)  如果文件上传超过大小限制 会抛出一个FileUploadBase.SizeLimitExceededException异常
    // 解析请求 将请求内容转换为对应的文件项集合
    // List<FileItem> parseRequest(HttpServletRequest request)  
    // 判断是否是enctype=multipart/form-data格式的上传
    // boolean isMultipartContent(HttpServletRequest request)
    // 设置头编码(如果你的文件名乱码了 可以设置它)  记住这些编码设置应该放在最前面  否则都已经获取完了 设置也就没意义
    // setHeaderEncoding(String encoding)
    
<%@page import="java.util.Arrays"%>
<%@page import="org.apache.commons.io.FilenameUtils"%>
<%@page import="java.util.UUID"%>
<%@page import="java.io.File"%>
<%@page import="org.apache.commons.fileupload.FileUploadBase"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@page import="org.apache.commons.fileupload.FileItemFactory"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	//1.搭建工厂 准备操作工
	FileItemFactory fif=new DiskFileItemFactory();
    ServletFileUpload upload=new ServletFileUpload(fif);
	
    //2.检验原材料
	if(!upload.isMultipartContent(request)){
		out.print("文件上传非法");
		return;
	}
	
    
    try{
    //3.设置总上传大小
    upload.setSizeMax(700 * 1024);
    //4.解析请求中文件项内容
   List<FileItem> fileItemList=upload.parseRequest(request);
    //5.遍历文件项集合
    for(FileItem fileItem:fileItemList){
    	//6.对文件项进行区别处理
    	 //获取name属性值
    		String name= fileItem.getFieldName();
    	if(fileItem.isFormField()){
    		//普通表单内容
    		 //获取value属性值
    		String value=fileItem.getString("UTF-8");
    		System.out.print("普通表单内容"+name+"-"+value);
    	}else{
    		//文件表单内容
    		//获取文件名
    		String fileName=fileItem.getName();
    		
    		
    		//!!!!解决文件重名问题:在存储前先一个随机名称(uuid或时间毫秒值)
    		    		//获取后缀名 commons.io包里面的
    		String extension=FilenameUtils.getExtension(fileName);
    		
    		//方法一
    		//c76817fa-d6cc-44ed-8f64-7a3c6e15a4c9  比如他就是uuid
    		//String newFileName=UUID.randomUUID().toString().replace("-", "")+"_header."+extension;
    		
    		//方法二

    		String newFileName=System.currentTimeMillis()+"_header."+extension;
    		
    		//!!!解决文件格式不支持问题: 想法是提前准备一个文件扩展名集合 判断是否包含此扩展名
    		List<String> extensionList=Arrays.asList("png","jpeg","gif");
    		if(!extensionList.contains(extension)){
    			out.print("文件格式不支持,请上传png,jpeg,gif的格式文件");
    			return;
    		}
    		
    		
    		File file=new File("f:\\upload\\"+newFileName);
    		//存储文件
    		fileItem.write(file);
    		
    	}
    }
    /*
    org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException
    $表示内部类*/
    }catch(FileUploadBase.SizeLimitExceededException e){
    	e.printStackTrace();
    	out.print("文件大小超过总限制100KB");
    }catch(Exception e){
    	e.printStackTrace();
    	out.print("服务器繁忙");
    }
%>

2. 掌握富文本编辑器的使用

3. 掌握页面拆分

在我们编写JSP文件时,我们发现在多个JSP文件中可能会出现大量重复的代码。JSP由HTML+Java组成的,所以有可能有大量的重复HTML或者大量的重复Java代码。那么我们就需要对重复性的代码进行复用。

3.1 静态包含

在这里插入图片描述
<%@include %> 指令

3.2 动态包含

在这里插入图片描述
<jsp:include/>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值