1:响应行 HTTP/1.1 200 OK
void setStatus(int sc) 设置响应状态码
2响应头 Content-type :text/html
void setHearder(String name,String value) 设置响应键值对
3:响应体
PrintWriter getWriter() 获取字符输出流
ServletOutputStream getOUtputStream() :获取字节输出流
重定向(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 {
- @Override
- protected 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 {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- System.out.println("res2......");
- }
- }
明确路径的使用
浏览器使用:需要加虚拟目录(项目访问路径)
服务端使用:不需要加虚拟路径
比如:
reg.getRequestDispatcher("路径" ) 不加虚拟路径
resp.sendRedirect("路径") 加虚拟路径
使用:通过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 {
- @Override
- protected 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("");
- writer.write("11");
- }
- }
流不需要关闭,随着响应结束,Response对象销毁,由服务器关闭
通过Response对象获取字符输出流
ServletOutputStream os=resp.getOutputStream();
写数据
OutputStream.write(字节数据);
- package Response;
-
- import org.apache.commons.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 {
- @Override
- protected 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-iogroupId>
- <artifactId>commons-ioartifactId>
- <version>2.6version>
- dependency>