All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.j2mvc.framework.dispatcher.reader.FileReader Maven / Gradle / Ivy

Go to download

强烈建议使用J2mvc 2.1以后的版本。 version 2.1.01 1.优化路径跳转,Servlet和Filter方式的路径设置 2.优化内存销毁 3.更换JSON依赖包 4.优化接收方法RequestMethod,封装不同ContentType格式提交 封装JSON,XML数据提交模块 JSON请求示例 { "id":"JSON134851", "title":"JSON提交的标题", "price":65.1, "stock":100 } XML请求示例 <!DOCTYPE root [ <!ELEMENT root ANY> <!ATTLIST Product SSN ID #REQUIRED>]> <root> <Product SSN='id'>XMLID12354</Product> <Product SSN='title'>XML提交的标题 </Product> <Product SSN='price'>55 </Product> <Product SSN='stock'>32 </Product> </root> version 2.1.02 1.解决URL无后缀情况无法加载静态资源,解决无法渲染CSS文件。 version 2.1.03 1.移除com.j2mvc.StringUtils.getUtf8()方法调用 更改为getCharset() version 2.1.04 1.去除Servlet和Filter的全局变量销毁,只交给Listener处理。 version 2.1.05,2.1.06,2.1.07 1.完善POST提交的JSON数据 支持接收基础数据类型、任意对象类型、任意数组类型。 不支持接收参数为集合类型或Map类型,但可以定义为接收对象类型的元素。 version 2.1.05,2.1.06,2.1.07 1.修改连接池变量 version 2.1.09 增加上传功能,修改RequestMethod,ContentType设置方式 version 2.1.10,2.1.11 更改上传文件名格式为UUID格式,移除JSON映射类,更改接收多文件上传。 version 2.1.12 删除文件列有的空对象 version 2.1.13 增加配置文件目录/conf,加载上传功能配置/conf/upload.properties version 2.1.18 拦截器也能获取ActionBean version 2.1.20 添加上传文件只读权限 version 2.1.21 支持同时接收文件和文本数据 version 2.1.22 增加文件接收类型media version 2.1.23 删除upload类printJson方法

The newest version!
package com.j2mvc.framework.dispatcher.reader;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Time;
import java.text.ParseException;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

import com.j2mvc.framework.Constants;
import com.j2mvc.framework.action.ActionUpload;
import com.j2mvc.framework.action.RequestUri;
import com.j2mvc.framework.action.UploadBean;
import com.j2mvc.framework.upload.Upload;
import com.j2mvc.framework.util.FieldUtil;
import com.j2mvc.framework.util.InvokeUtils;
import com.j2mvc.util.StringUtils;

public class FileReader extends BaseReader {
	
	private ActionUpload actionUpload;
	private HttpServletResponse response;
	private UploadBean uploadBean;
	

	static final Logger  log = Logger.getLogger(DefaultReader.class);

	public FileReader(HttpServletRequest request, Method method, Object object,
			HttpServletResponse response,
			ActionUpload actionUpload) {
		super(request, method, object);
		this.response = response;
		this.actionUpload = actionUpload;
		
		// 接收上传
		upload();
	}

	@Override
	public synchronized  Object result() {
		clazz = object.getClass();
		types = method.getParameterTypes();
		int length = types.length;
		if(length>0){
			// 请求参数名数组
			names = getParameterNames(clazz,method.getName(), length);
			values = new Object[types.length];
			if(names!=null){
				for (int i = 0; i < types.length; i++) {
					Class type = types[i];
					values[i] = getParameterValue(type, names[i]);
				}
				try {
					return method.invoke(object,values);
				} catch (IllegalArgumentException e) {
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					e.printStackTrace();
				}
			}
		}
		// 没有参数,执行当前Action方法
		return InvokeUtils.invoke(clazz, method.getName(), object, null);
	}

	private synchronized void upload() {
		Upload upload =  new Upload(request, response);
		
		if(!StringUtils.isEmpty(actionUpload.getDirname()))
			upload.setDirName(actionUpload.getDirname());
		
		if(!StringUtils.isEmpty(actionUpload.getExts()))
			upload.setExts(actionUpload.getExts());
		
		if(!StringUtils.isEmpty(actionUpload.getSavePath()))
			upload.setSavePath(actionUpload.getSavePath());
		
		if(!StringUtils.isEmpty(actionUpload.getSaveUrl()))
			upload.setSaveUrl(actionUpload.getSaveUrl());

		if(actionUpload.getMaxSize() > 0)
			upload.setMaxSize(actionUpload.getMaxSize());
		
		upload.setKeepOriginName(actionUpload.isKeepOriginName());
		upload.setInputStreamOnly(actionUpload.isInputStreamOnly());
		
		try { 
			upload.execute();
			uploadBean = new UploadBean();
			uploadBean.setErrors(upload.getErrors());
			uploadBean.setFileList(upload.getFileList());
			uploadBean.setTextData(upload.getTextData());
		} catch (Exception e) { 
			e.printStackTrace();  
		}  
	}

	public UploadBean getUploadBean() {
		return uploadBean;
	}

	/**
	 * 	获取参数值
	 * @param type
	 * @param name
	 * 
	 */
	protected Object getParameterValue(Class type,String name){
		if(RequestUri.class.isAssignableFrom(type) ){
			String path = request.getContextPath();
			String requestUri = request.getRequestURI();
			requestUri = StringUtils.deleRepeat(requestUri, "/");
			requestUri = requestUri.substring(path.length(),requestUri.length());
			requestUri = requestUri.startsWith("/")?requestUri.substring(1,requestUri.length()):requestUri;
			requestUri = requestUri.endsWith("/")?requestUri.substring(0,requestUri.length()-1):requestUri;
			String[] values = requestUri.split("/");
			return new RequestUri(values);
		}else if(String.class.isAssignableFrom(type)
				|| Integer.class.isAssignableFrom(type) 
				|| Short.class.isAssignableFrom(type)
				|| short.class.isAssignableFrom(type)
				|| int.class.isAssignableFrom(type)
				|| Long.class.isAssignableFrom(type) 
				|| long.class.isAssignableFrom(type)
				|| Float.class.isAssignableFrom(type)
				|| float.class.isAssignableFrom(type)
				|| Double.class.isAssignableFrom(type)
				|| double.class.isAssignableFrom(type)
				|| Boolean.class.isAssignableFrom(type)
				|| boolean.class.isAssignableFrom(type)
				|| Time.class.isAssignableFrom(type)
				|| Date.class.isAssignableFrom(type)
				|| byte[].class.isAssignableFrom(type)
				|| String[].class.isAssignableFrom(type)){
			// 基础类型获取值
			return getValue(type, name);
		}else {
			try {
				List fields = FieldUtil.getFields(null, type);
				Object object = getObjectByPrimaryKey(fields, type);
				if(object == null){
					object = type.newInstance();
				}
				invoke(fields, object);
				return object;
			} catch (InstantiationException e) {
				log.error(e.getMessage());
			} catch (IllegalAccessException e) {
				log.error(e.getMessage());
			}
		}
		return null;
	}
	/**
	 * 获取值
	 * @param type
	 * @param name
	 * 
	 */
	@Override
	protected Object getValue(Class type,String name){
		Object value = null;
		String str =  request.getParameter(name);
		str = getCharset(str);
		if(String.class.isAssignableFrom(type)) {
			value = str;	
		}else if(Integer.class.isAssignableFrom(type) 
				|| Short.class.isAssignableFrom(type)
				|| short.class.isAssignableFrom(type)
				|| int.class.isAssignableFrom(type)){
			try{
				value = Integer.valueOf(str);
			}catch(Exception e){}
		}else if(Long.class.isAssignableFrom(type) 
				|| long.class.isAssignableFrom(type)){
			try{
				value = Long.valueOf(str);
			}catch(Exception e){}
		}else if(Float.class.isAssignableFrom(type)
				|| float.class.isAssignableFrom(type)){
			try{
				value = Float.valueOf(str);
			}catch(Exception e){}
		}
		else if(Double.class.isAssignableFrom(type)
				|| double.class.isAssignableFrom(type)){
			try{
				value = Double.valueOf(str);
			}catch(Exception e){}
		}else if(Boolean.class.isAssignableFrom(type)
				|| boolean.class.isAssignableFrom(type)){
			if(str!=null && str.equalsIgnoreCase("true")){
				value = true;
			}else if(str!=null && str.equalsIgnoreCase("false")){
				value = false;
			}
		}else if(Time.class.isAssignableFrom(type))
			try {
				value = Constants.DEFAULT_TIME_FORMAT.parse(str);
			} catch (ParseException e) {
				log.error(e.getMessage());
			}
		else if(Date.class.isAssignableFrom(type)){
			try {
				value = Constants.DEFAULT_DATE_TIME_FORMAT.parse(str);
			} catch (ParseException e) {
				log.error(e.getMessage());
			}
		}else if(byte[].class.isAssignableFrom(type)){
			value = str;
		}else if(String[].class.isAssignableFrom(type)){
			value = request.getParameterValues(name);
		}	
		return value;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy