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. LintCode题解之斐波纳契数列

    直接使用递归的方法会导致TLE,加个缓存就好了: public class Solution { private Integer[] buff = new Integer[1000]; /* * @p ...

  2. AbstractQueuedSynchronizer 原理分析 - 独占/共享模式

    1.简介 AbstractQueuedSynchronizer (抽象队列同步器,以下简称 AQS)出现在 JDK 1.5 中,由大师 Doug Lea 所创作.AQS 是很多同步器的基础框架,比如 ...

  3. 复杂和遗留的数据库schema

    本文作者:苏生米沿 本文地址:http://blog.csdn.net/sushengmiyan/article/details/50414652 In this chapter, we focus ...

  4. mxgraph进阶(四)mxGraph再启程

    mxgraph进阶(四)mxGraph再启程 前言   小论文Constructing User Interaction Behaviors Net from System Log. (AICE 20 ...

  5. 在Mac上搭建React Native开发环境

    概述 前面我们介绍过在window环境下开发React Native项目,今天说说怎么在mac上搭建一个RN的开发环境. 配置mac开发环境 基本环境安装 1.先安装Homebrew:用于安装Node ...

  6. python+OpenCV 特征点检测

    1.Harris角点检测 Harris角点检测算法是一个极为简单的角点检测算法,该算法在1988年就被发明了,算法的主要思想是如果像素周围显示存在多于一个方向的边,我们认为该点为兴趣点.基本原理是根据 ...

  7. [ExtJS5学习笔记]第二十四节 Extjs5中表格gridpanel或者表单数据后台传输remoteFilter设置

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/39667533 官方文档:http://docs.sencha.com/extjs/5. ...

  8. 最简单的视频编码器:基于libx264(编码YUV为H.264)

    ===================================================== 最简单的视频编码器系列文章列表: 最简单的视频编码器:编译 最简单的视频编码器:基于libx ...

  9. 安卓java.lang.IllegalStateException: The specified child already has a parent.解决方案

    在使用ViewPager的时候遇到一个错误java.lang.IllegalStateException: The specified child already has a parent. You ...

  10. android studio——Failed to set up SDK

    最近使用android studio ,在IDE里面使用Gradle构建的时候,一直出现构建失败,失败信息显示Failed to set up SDK.然后 提示无法找到andriod-14平台,我更 ...