100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Response设置响应数据 重定向 目录问题 字节流 字符流

Response设置响应数据 重定向 目录问题 字节流 字符流

时间:2024-02-24 12:57:46

相关推荐

Response设置响应数据 重定向 目录问题 字节流 字符流

响应数据分为3部分:

1:响应行 HTTP/1.1 200 OK

void setStatus(int sc) 设置响应状态码

2响应头 Content-type :text/html

void setHearder(String name,String value) 设置响应键值对

3:响应体 <html><head><body></body></html>

PrintWriter getWriter() 获取字符输出流

ServletOutputStream getOUtputStream() :获取字节输出流

Response完成重定向

重定向(Redirect):一种资源跳转方式

实现方式:

resp.setStatus(302)

resp.setHeader("location","资源的虚拟路径")

或者

resp.sendRedirect("要跳转的虚拟路径");

重定向特点:

浏览器地址栏路径发生变化

可以重定向到任意位置的资源(服务器内部,外部均可) 因为浏览器发了两次请求

两次请求,不能再多个资源使用request共享数据

package Response;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/res1")public class Response1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("res1......");//第一种方法// resp.setStatus(302);// resp.setHeader("location","res2");//快捷方法// resp.sendRedirect("Servlet-demo1/res2");String contextPath = req.getContextPath();resp.sendRedirect(contextPath+"/res2");//这样获取路径更完美}}

package Response;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/res2")public class Response2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("res2......");}}

路径问题

明确路径的使用

浏览器使用:需要加虚拟目录(项目访问路径)

服务端使用:不需要加虚拟路径

比如:

<a href=""> 加虚拟路径

<from action=""> 加虚拟路径

reg.getRequestDispatcher("路径" ) 不加虚拟路径

resp.sendRedirect("路径") 加虚拟路径

Response响应字符数据

使用:通过Response对象获取字符输入流

PrintWriter writer=resp.getWriter();

写数据

writer.write("数据");

如需要写html代码,或者中文需要设置流的规则

resp.setContentType("text/html;charset=utf-8");

package Response;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;@WebServlet("/res3")public class Response3 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");//设置流编码规则PrintWriter writer = resp.getWriter();writer.write("牛马");writer.write("aaa");writer.write("</br>");writer.write("11");}}

流不需要关闭,随着响应结束,Response对象销毁,由服务器关闭

字节流的使用

通过Response对象获取字符输出流

ServletOutputStream os=resp.getOutputStream();

写数据

OutputStream.write(字节数据);

package Response;import mons.io.IOUtils;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.*;@WebServlet("/res4")public class Response4 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取文件,字节输入流FileInputStream fs = new FileInputStream("F:\\1.png");//获取Response,输出流ServletOutputStream os = resp.getOutputStream();//进行拷贝// byte[] bytes = new byte[1024];// int len=0;// while ((len=fs.read(bytes))!=-1){// os.write(bytes,0,len);// }// fs.close();//关闭流//这里我们直击导坐标,调用方法 ,流对拷IOUtils.copy(fs,os);}}

io工具包

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。