HttpServletResponse输出流大小永远是16364?
时间: 2023-11-09 08:46:55 浏览: 68
根据你提供的引用内容,我可以回答你的问题。首先,如果你想知道一个内存InputStream的大小以便将其写入HttpResponse的http标头,你可以考虑以下几种方法。
一种方法是通过将InputStream转换为ByteArrayOutputStream,然后获取其大小。可以使用ByteArrayOutputStream的size()方法来获取字节数组的长度。这个长度就是InputStream的大小。例如,你可以这样做:
```java
InputStream inputStream = // your input stream
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer = new byte
相关问题
获取HttpServletResponse 输出流大小
要获取HttpServletResponse输出流的大小,你可以使用`javax.servlet.ServletOutputStream`的`getBufferSize()`方法。该方法返回输出流的缓冲区大小,即输出流的大小。
示例代码如下:
```java
int bufferSize = resp.getOutputStream().getBufferSize();
```
这将返回输出流的大小,单位为字节。
引用:
: 后端代码: @WebServlet("/response") public class ResponseStudyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取请求发送的queryString数据:status=xxx String status = req.getParameter("status"); resp.setStatus((Integer.parseInt(status))); resp.getWriter().write("设置响应状态码成功"); } } 。
: 后端代码: @WebServlet("/html") public class HTMLTypeServlet extends HttpServlet { //html?type=... @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //响应html:设置响应的Content-Type resp.setContentType("text/html; charset=utf-8"); PrintWriter pw = resp.getWriter(); //获取queryString中,type的值 String type = req.getParameter("type"); if("1".equals(type)){//返回简单的html pw.println("<h3>获取网页成功</h3>"); }else if("2".equals(type)){//返回复杂的动态html //html?type=2&username=xxx String username = req.getParameter("username"); pw.println("<p>"); pw.println("欢迎你," username); pw.println("</p>"); } } } 。
: 后端代码: @WebServlet("/goto") public class GoToServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //goto?type=xxx String type = req.getParameter("type"); if("1".equals(type)){//重定向 // resp.setStatus(301); // resp.setHeader("Location","hello.html"); //以上代码可以简化为sendRedirect resp.sendRedirect("hello.html"); }else if("2".equals(type)){//转发 req.getRequestDispatcher("hello.html") .forward(req,resp); } } } 。
三、返回一个文件。
获取HttpServletResponse 输出流内容
在 Servlet 中,可以使用 HttpServletResponse 的 getWriter() 方法或者 getOutputStream() 方法获取输出流。如果要获取输出流的内容,可以先将 HttpServletResponse 对象传递给一个自定义的 HttpServletResponseWrapper 子类,然后重写其 getOutputStream() 或 getWriter() 方法,在其中保存输出的内容,最后通过调用 HttpServletResponseWrapper 子类的 getContent() 方法获取输出的内容。
以下是一个示例代码:
```java
public class ResponseWrapper extends HttpServletResponseWrapper {
private StringWriter sw;
private PrintWriter pw;
public ResponseWrapper(HttpServletResponse response) {
super(response);
sw = new StringWriter();
pw = new PrintWriter(sw);
}
@Override
public PrintWriter getWriter() throws IOException {
return pw;
}
@Override
public ServletOutputStream getOutputStream() throws IOException {
return new ServletOutputStream() {
@Override
public boolean isReady() {
return false;
}
@Override
public void setWriteListener(WriteListener listener) {
}
@Override
public void write(int b) throws IOException {
sw.write(b);
}
};
}
public String getContent() {
pw.flush();
return sw.toString();
}
}
```
在 Servlet 中可以这样使用:
```java
ResponseWrapper wrapper = new ResponseWrapper(response);
chain.doFilter(request, wrapper);
String content = wrapper.getContent();
```
其中 chain.doFilter(request, wrapper) 会将请求转发给下一个 Filter 或者 Servlet,并将响应输出到 HttpServletResponse 中,而 wrapper.getContent() 则可以获取最终输出的内容。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)