package cn.edu.hactcm.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.List;
import java.util.UUID;

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

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;

import cn.edu.hactcm.domain.User;
import cn.edu.hactcm.exception.WebException;

public final class WebUtils {

	private WebUtils(){}

	public static <T> T request2Bean(HttpServletRequest request, Class<T> beanClazz) {

		try {
			T bean = beanClazz.newInstance();
			// TODO 要注意的是修改的数据相当于一条新的,应该把修改信息重新建一个表。
			// TODO 在修改表中建立一个字段,用于参照原始数据的ID,每次修改删除原来记录重新添加新数据
			// 看一下是否需要id‘
			if(request.getParameter("id")==null)
				BeanUtils.setProperty(bean, "id", makeUUID());
			Enumeration e = request.getParameterNames();
			while(e.hasMoreElements()) {
				String name = (String) e.nextElement();
				String value = request.getParameter(name);
				BeanUtils.setProperty(bean, name, value);
			}
			return bean;
		} catch (Exception e) {
			throw new WebException(e);
		}
	}

	@Deprecated
	public static <T> T request2Bean_forComment(HttpServletRequest request,
			Class<T> beanClazz) {
		try {
			T bean = beanClazz.newInstance();
			// TODO 要注意的是修改的数据相当于一条新的,应该把修改信息重新建一个表。
			// TODO 在修改表中建立一个字段,用于参照原始数据的ID,每次修改删除原来记录重新添加新数据
			// 看一下是否需要id‘
			Enumeration e = request.getParameterNames();
			while(e.hasMoreElements()) {
				String name = (String) e.nextElement();
				String value = request.getParameter(name);
				BeanUtils.setProperty(bean, name, value);
			}
			return bean;
		} catch (Exception e) {
			throw new WebException(e);
		}
	}

	//这里使用了BeanUtils工具。
	public static void copyBean(Object orig, Object dest) {
		try {
			// ConvertUtils.register(new DateLocaleConverter(), Date.class);
			BeanUtils.copyProperties(dest, orig);
			BeanUtils.setProperty(dest, "id", makeUUID());
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	//获取UUID,作为各表的id的值
	public static String makeUUID() {
		return UUID.randomUUID().toString();
	}

	// 将消息转发给 message.jsp 全局消息页面
	public static void forward(String message, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setAttribute("message", message);
		request.getRequestDispatcher("/WEB-INF/hactcmmobleshop/message.jsp").forward(request, response);
	}

	public static <T>T uploadrequest2Bean(HttpServletRequest request, Class<T> beanClazz) {
		try {
			T bean = beanClazz.newInstance();
			//处理文件上传
			//创建工厂
			DiskFileItemFactory factory = new DiskFileItemFactory();
			//创建文件上传组件
			ServletFileUpload upload = new ServletFileUpload(factory);
			if (!upload.isMultipartContent(request))
				throw new WebException("not a upload form");
			String id = makeUUID();    //这是phone的id
			//获得远程发布手机信息的电脑的ip
			String releaseip = request.getRemoteAddr();
			String releasetime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
								.format(new Date());

			String brandname = "";

			//添加手机添加者
			User user = (User) request.getSession().getAttribute("user");

			//看一看是否需要id
			if (request.getParameter("id") == null)
				BeanUtils.setProperty(bean, "id", id);
			if (request.getParameter("releaseip") == null)
				BeanUtils.setProperty(bean, "releaseip", releaseip);
			if (request.getParameter("releasetime") == null)
				BeanUtils.setProperty(bean, "releasetime", releasetime);
			if (request.getParameter("userid") == null)
				BeanUtils.setProperty(bean, "userid", user.getId());
			//相将brandname属性设置为空,最后通过查询数据库查出
			BeanUtils.setProperty(bean, "brandname", brandname);

			//解析
			List<FileItem> fileItems = upload.parseRequest(request);
			for (FileItem item : fileItems) {
				if (item.isFormField()) {
					//封装到bean
					String name = item.getFieldName();
					String value = item.getString("utf-8");
					BeanUtils.setProperty(bean, name, value);
				} else {
					//文件上传组件
					String name = item.getFieldName();
					//获得文件名
					String filename = item.getName();
					filename = filename.substring(filename.lastIndexOf("\\")+1);

					// TODO 要将上传图片打散存放在不同的目录中,同时存的也不应该仅仅是jpg格式的

					// TODO 在这个系统中还有一个错误,那就是不登陆也可以实现所有的功能,也可以实现发布消息,这个待完成,得使用细粒度权限控制

					//图片相对于web应用的路径
					String webPath = "/uploadphonepic/" + id + ".jpg";
					//获得绝对路径
					String path = request.getSession().getServletContext().getRealPath(webPath);
					System.out.println(path);

					File file = new File(path);
					file.getParentFile().mkdirs();	// 创建目录
					file.createNewFile();	// 创建文件

					// 上传
					InputStream in = item.getInputStream();
					OutputStream out = new FileOutputStream(file);
					Streams.copy(in, out, true);

					// 删除临时文件
					item.delete();

					// 将图片的路径封装到bean
					BeanUtils.setProperty(bean, name, webPath);
				}
			}
			return bean;
		} catch (Exception e) {
			throw new WebException(e);
		}
	}
}

获取request参数的工具类的更多相关文章

  1. PHP 命令行参数解析工具类

    <?php/** * 命令行参数解析工具类 * @author guolinchao * @email luoyecb@163.com */class CommandLine{ // store ...

  2. liferay笑傲江湖-API之参数的工具类(ParamUtil)

    public class ParamUtil { 036 037 public static boolean get( 038 HttpServletRequest request, String p ...

  3. JSON参数解析工具类

    /// <summary> /// 解析JSON参数 /// </summary> public class JSONParser { JObject jObj = null; ...

  4. java获取客户端ip地址工具类

    public class IpUtils { private static final String[] HEADERS = { "X-Forwarded-For", " ...

  5. 获取请求的ip工具类

    package com.example.util; import javax.servlet.http.HttpServletRequest; /** * get remote msg * 获取访问的 ...

  6. 从session中获取当前用户的工具类

    package cn.crmx.crm.util; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Ht ...

  7. 获取post请求数据工具类

    package com.ccidit.features.otherFunctions.util; import java.io.BufferedReader; import java.io.IOExc ...

  8. beego: 获取request参数

    beego提供了一套web开发的框架.但我们在开发过程中遇到了一些问题,现汇总如下. 测试1:测试只有keys数组的情况 func (this *TestController) Index() { k ...

  9. 使用JS获取request参数

    1.document.write('<%=request.getAttribute("param")%>'); 2.window.navigator.userAgent ...

随机推荐

  1. window环境搭建zookeeper,kafka集群

    为了演示集群的效果,这里准备一台虚拟机(window 7),在虚拟机中搭建了单IP多节点的zookeeper集群(多IP节点的也是同理的),并且在本机(win 7)和虚拟机中都安装了kafka. 前期 ...

  2. Docker标准化开发测试和生产环境

    对于大部分企业来说,搭建 PaaS 既没有那个精力,也没那个必要,用 Docker 做个人的 sandbox 用处又小了点. 可以用 Docker 来标准化开发.测试.生产环境. Docker 占用资 ...

  3. linux系统性能监控--内存利用率

    Linux提供了对物理内存进行合理.高效的访问并可以访问潜在的海量虚存的技术.虚存通常稍多于操作系统实际拥有的内存容量,以便将较少使用的数据卸载到磁盘存储器上,同时又呈现出系统拥有大量物理内存的假象. ...

  4. APP自动化框架LazyAndroid使用手册(4)--测试模板工程详解

    概述 前面的3篇博文分别对lazyAndroid的框架简介.元素抓取和核心API进行了说明,本文将基于框架给出的测试模板工程,详细阐述下使用该框架进行安卓UI自动化测试的步骤. 模板工程 先来看一下模 ...

  5. android Handler机制之ThreadLocal详解

    概述 我们在谈Handler机制的时候,其实也就是谈Handler.Message.Looper.MessageQueue之间的关系,对于其工作原理我们不做详解(Handler机制详解). Messa ...

  6. Mybatis源码分析之参数映射及处理ParameterHandler

    ParameterHandler是用来设置参数规则的,当StatementHandler调用prepare方法之后,接下来就是调用它来进行设置参数. ParameterHandler接口: publi ...

  7. time,gettimeofday,clock_gettime

    time()提供了秒级的精确度 1.头文件 <time.h> 2.函数原型 time_t time(time_t * timer) 函数返回从UTC1970-1-1 0:0:0开始到现在的 ...

  8. 二维码扫描&集合排序

    一.二维码扫描机制 二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的:在代码编制上巧妙地利用构 ...

  9. Cocos2D中节点Z序的计算规则

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交 ...

  10. 百度地图开发之POI数据检索

    前面学习百度地图的一些基本的用法,这次我们一起来看一看百度地图的检索功能吧 poi检索api的基本用法 百度地图的POI类中共有如下几个方法 PoiBoundSearchOption POI范围内检索 ...