Request 内容实体body的简单例子 PART3
Posted zghw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Request 内容实体body的简单例子 PART3相关的知识,希望对你有一定的参考价值。
1.访问路径http://localhost:8080/servlet-demo/submit.jsp
2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="myRequestServlet3" method="post" enctype="multipart/form-data">
<input name="userName" type="text" value="张三"/>
<input name="age" type="text" value="age"/><br/>
<input name="myfile1" type="file" value="上传"/><br/>
<input name="myfile2" type="file" value="上传"><br/>
<input name="sub" type="submit" value="提交">
</form>
</body>
</html>
3.servlet
package com.zghw.servlet.demo;
import java.io.IOException;
import java.util.Collection;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
/**
* 关于请求体body的处理 一般是通过post方式传递过来的,比如表单数据 或者是上传的资源 body体中的数据时二进制格式 上传文件需要设置@MultipartConfig
* 或者在servlet设置可以使用Part
*
*/
// 设置上传目标文件夹地址
@MultipartConfig(location = "/home/zghw/testdoc/")
@WebServlet("/myRequestServlet3")
public class MyRequestServlet3 extends HttpServlet
static void f(Object obj)
System.out.println(obj);
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
// 设置编码格式
request.setCharacterEncoding("UTF-8");
// 得到body体的内容长度单位字节
int contentLength = request.getContentLength();
f(contentLength);
// 3.1版本支持,现在用的3.0
// long contentLengthLong = request.getContentLengthLong();
// 内容体body的类型,比如表单的内容体类型为:application/x-www-form-urlencoded
String contentType = request.getContentType();
// 当类型是multipart/form-data (form表单中属性值enctype="multipart/form-data")时,
// body体的内容就和默认的application/x-www-form-urlencoded 不一样了
f(contentType);
// getInputStream()和getReader()不能同时调用
// 就像一个数据管道一样,当作为字节流打开后就不能同时使用字符流打开了
/*
* ServletInputStream sis = request.getInputStream(); //字节流输出body中的内容
* byte[] b=new byte[1024]; int off=0; int len=b.length;
* while(sis.readLine(b, off, len)>-1) //进行解码输出
* System.out.println(URLDecoder.decode(new String(b),"UTF-8"));
*/
// 直接使用字符流读取信息
/*
* BufferedReader reader = request.getReader(); String input=null;
* while((input=reader.readLine())!=null) System.out.println(input);
*/
// 文件上传的处理,也包含了文本框所以要和文本框分开的话就不再一个form中写
// 取得上传的文件集合
Collection<Part> partColl = request.getParts();
if (partColl != null && !partColl.isEmpty())
for (Part part : partColl)
// 得到上传的文件流
// InputStream is=part.getInputStream();
// 得到文件名
f("name=" + part.getName());
// 得到提交过来的文件名 servlet版本3.1才能使用
// f("submittedFileName=" + part.getSubmittedFileName());
// 文件大小
f("size=" + part.getSize());
// 文件类型
f("content-type=" + part.getContentType());
for (String head : part.getHeaderNames())
f(head + "=" + part.getHeader(head));
part.write(part.getName());
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
doGet(request, response);
以上是关于Request 内容实体body的简单例子 PART3的主要内容,如果未能解决你的问题,请参考以下文章
http GET 请求的参数怎么传递,放在body里用json形式后台request读流获取不到数据。
org.springframework.http.converter.HttpMessageNotReadableException: Required request body错误解决方案
org.springframework.http.converter.HttpMessageNotReadableException: Required request body错误解决方案