HttpServletResponse 和 HttpServletRequest
HttpServletRespose
-
向浏览器发送数据
getOutputStream() getWriter()
-
向浏览器发送响应头
server //使用的服务器名称,如Server:ApachApache/1.36(Unix) Content-type //用来指明发送给接受者的实体正文的媒体类型,如Content-type:text/html;charset=GBK Content-language //描述了资源所用的自然语言,与Accept-Language对应 Content-length //指明实体正文的长度,用以字节方式存储的十进制数字来表示 Keep-Alive //保持连接的时间,如Kepp-Alive:timeout=5,max=120
-
常见的状态码
200 //客服端请求成功 302 //临时跳转,跳转的地址通过指定(页面重定位) 400 //客户端请求语法有错误,不能被服务器识别 403 //服务器收到请求,但是拒接提供服务 404 //请求资源不存在 500 //服务器发生不可预期的错误(网关错误,语法错误)
应用
-
向浏览器输出信息
-
下载文件
public class ResponseDownload extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取路径 String realPath ="F:\\ideaProject\\javaweb-02-servlet\\responseTest\\target\\classes\\八重樱.png"; //获取下载文件名 String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1); // PrintWriter writer = resp.getWriter(); // writer.println(URLEncoder.encode(fileName,"UTF-8")); //设置浏览器支持下载 resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8")); //获取文件输入流 FileInputStream in = new FileInputStream(realPath); ServletOutputStream os = resp.getOutputStream(); int len=0; byte[] buff = new byte[1024]; while((len = in.read(buff))!=-1){ os.write(buff,0,len); } os.close(); in.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
-
验证码
-
实现重定向
public class ResponseServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.sendRedirect("/re/login.html"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
HttpServletRequest
-
获取前端传递过来的参数
getParameter() //String str getParameterValues() //String []str
-
请求转发
public class RequestSerlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //从request中获取数据 String username = req.getParameter("username"); String password = req.getParameter("password"); String[] hobbies = req.getParameterValues("hobbies"); System.out.println(username); System.out.println(password); //请求转发 req.getRequestDispatcher("/index.jsp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
重定向和转发的区别
相同点:
页面都会发生跳转
不同点:
请求转发:url地址栏不会发生变化
重定向:url地址栏会发生改变