使用Map封装请求信息并显示

使用Map封装请求信息并显示

在这里插入图片描述
upload.jsp表单文件:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>文件上传</h3><br/>
	<span style="color:red;">${errorMsg}</span>
	<form action="/upload-download-i18n/upload" method="POST" enctype="multipart/form-data">
		账号:<input type="text" name="username"/><br/>
		邮箱:<input type="text" name="email"/><br/>
		头像:<input type="file" name="headImg" accept="image/*"/><br/>
		<input type="submit" value="朕要提交"/><br/>
	</form>
</body>
</html>

自定义异常类(LogicException):

public class LogicException extends RuntimeException{
	private static final long serialVersionUID = 1L;

	public LogicException(String message, Throwable cause) {
		super(message, cause);
	}

	public LogicException(String message) {
		super(message);
	}
	
}

一、新建一个对象类(如:user)

@Data
public class User {
	private String username = null;
	private String email = null;
	private String imageUrl = null;//图片保存的路径  (JSP:<img src="${user.imageUrl}">)
	private String imageName = null;//图片的原始名称
}

二、在调用者类(UplocalServlet.java)中获得upload.jsp传入的参数值,并赋值给user对象,再在user.jsp中显示;

@WebServlet("/upload")
public class UploadServlet extends HttpServlet{
	private static final long serialVersionUID = 1L;
	

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		try {
			User user = new User();
			//-------------------往user对象中传入数据-------------------------
			//封装普通表单的数据
			//key:参数名称
			//value:参数值
			Map<String,String> fieldMap = new HashMap<>();
			//封装上传图片(因为要通过一个key获得两个value,所以对图片进行再封装)
			//key:参数名称
			//value:ImgFile对象同时封装了imgeUrl和imageName
			Map<String,ImgFile> imgMap = new HashMap<>();
			
			FileUtil.upload(req,fieldMap,imgMap);
			
			user.setUsername(fieldMap.get("username"));
			user.setEmail(fieldMap.get("email"));
			
			user.setImageName(imgMap.get("headImg").getImageName());
			user.setImageUrl(imgMap.get("headImg").getImageUrl());
			
			//---------------------------------------------------------------
			System.out.println(user);
			System.out.println(fieldMap);
			System.out.println(imgMap);
			req.setAttribute("user", user);
			req.getRequestDispatcher("/user.jsp").forward(req, resp);
		}catch(LogicException e) {
			String errorMsg = e.getMessage();//获取异常信息
			req.setAttribute("errorMsg",errorMsg);
			req.getRequestDispatcher("/upload.jsp").forward(req, resp);
		}
	}
}

三、封装的ImgFile类(保存图片相对路径和真实名称)

@Data
public class ImgFile {
	private String imageUrl = null;//图片保存的路径  (JSP:<img src="${user.imageUrl}">)
	private String imageName = null;//图片的原始名称
}

四、使用自定义的工具类(FileUtil.java)进行接受处理upload.jsp传入的参数

public class FileUtil {
	
	//允许接受上传的文件类型(如:图片)
	private static final String ALLOWED_IMAGE_TYPE="png;gif;jpg;jpeg";

	public static void upload(HttpServletRequest req,Map<String,String> fieldMap,Map<String,ImgFile> imgMap){
		//解析和检查请求:请求方式是否是POST,请求编码是否是muitipart/form-data
		boolean isMultipart = ServletFileUpload.isMultipartContent(req);
		if(!isMultipart) {
			return;
		}
		try {
			//1.创建FileItemFactory对象
			//FileItemFactory是用来创建FileItem对象的
			//FileItem对象:form表单中的表单控件的封装
			DiskFileItemFactory factory = new DiskFileItemFactory();
			//2.创建文件上传处理器
			ServletFileUpload upload = new ServletFileUpload(factory);
			
				//设置单个上传文件的大小限制
				upload.setFileSizeMax(1024*1024*2);//2M
				//设置该次请求总数据大小限制
				upload.setSizeMax(1024*1024*3);//3M
			
			//3.解析请求
			List<FileItem> items = upload.parseRequest(req);
			//4.迭代出每一个FileItem
			for(FileItem item : items) {
				String fieldName = item.getFieldName();//获取表单控件的name属性值(参数名)
				if(item.isFormField()) {
				//普通表单控件
					//得到控件的参数值
					String value = item.getString("UTF-8");
					//存储控件名称(jsp文件中的name)和对应的value值,最后返回到调用者中进行读取
					fieldMap.put(fieldName,value);
				}else {
					//-----------------------判断上传文件格式是否符合要求------------
					//上传文件的拓展名
					String ext = FilenameUtils.getExtension(item.getName());
					String[] allowedImageType = ALLOWED_IMAGE_TYPE.split(";");
					
					//当前上传类型不再允许的范围内
					if(!Arrays.asList(allowedImageType).contains(ext)) {
						throw new LogicException("上传格式错误,请重新上传");
						
					}
					//----------------------------------------------------------
					//表单上传控件
					System.out.println("上传文件的名称:"+item.getName());
					//文件名称
					String fileName = UUID.randomUUID().toString()+"."
									+FilenameUtils.getExtension(item.getName());
					//目标的绝对路径"E:/JAVA/My_eclipseEE/upload-download-i18n/webapp/upload"
					String dir = req.getServletContext().getRealPath("/upload");
					//把二进制数据写到哪一个文件中
					item.write(new File(dir, fileName));	
					
					//-----------将图片中的真实名字和图片相对路径保存在imgMap中,最后返回给调用者-------------------------
					ImgFile img = new ImgFile();
					img.setImageUrl("/upload/"+fileName);
					img.setImageName(FilenameUtils.getName(item.getName()));
					imgMap.put(fieldName,img);
					//---------------------------------------------------
				}
			}
		}catch(FileSizeLimitExceededException e) {
			throw new LogicException("单个上传文件大小不能超过2M",e);//继续抛出异常类给该类调用者(UploadServlet)
		}catch(SizeLimitExceededException e) {
			throw new LogicException("该次请求大小不能超过3M",e);//继续抛出异常类给该类调用者(UploadServlet)
		}catch(LogicException e) {
			throw e;//继续抛出异常类给该类调用者(UploadServlet)
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}

五、在user.jsp中显示表单输入的内容

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	${user}<br/>
	名称:${user.username}<br/>
	邮箱:${user.email}<br/>
	头像:${user.imageName}<br/>
	<img alt="" src="${user.imageUrl}"><br/>
</body>
</html>


upload.jsp:
在这里插入图片描述

user.jsp:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java实现: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.Map; public class HttpRequest { public static String sendGet(String url, Map<String, String> params) throws Exception { StringBuilder result = new StringBuilder(); StringBuilder urlBuilder = new StringBuilder(url); if (params != null && !params.isEmpty()) { urlBuilder.append("?"); for (Map.Entry<String, String> entry : params.entrySet()) { urlBuilder.append(entry.getKey()) .append("=") .append(entry.getValue()) .append("&"); } } URL urlObj = new URL(urlBuilder.toString()); HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); conn.setReadTimeout(5000); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); String line; while ((line = in.readLine()) != null) { result.append(line); } in.close(); return result.toString(); } } ``` Python实现: ```python import urllib.parse import urllib.request class HttpRequest: @staticmethod def send_get(url, params=None): if params: url += "?" + urllib.parse.urlencode(params) with urllib.request.urlopen(url) as response: return response.read().decode("utf-8") ``` 使用示例: ```java import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) throws Exception { // Java发送GET请求 String url = "https://www.baidu.com"; Map<String, String> params = new HashMap<>(); params.put("wd", "java"); String result = HttpRequest.sendGet(url, params); System.out.println(result); // Python发送GET请求 url = "https://www.baidu.com" params = {"wd": "python"} result = HttpRequest.send_get(url, params) print(result) } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值