网站搭建崩溃,装饰设计学校,热点新闻事件2023,网站意识形态建设请求和转发#xff1a; response说明一、response文件下载二、response验证码实现1.前置知识#xff1a;2.具体实现#xff1a;3.知识总结 三、response重定向四、request转发五、重定向和转发的区别 response说明
response是指HttpServletResponse,该响应有很多的应用 response说明一、response文件下载二、response验证码实现1.前置知识2.具体实现3.知识总结 三、response重定向四、request转发五、重定向和转发的区别 response说明
response是指HttpServletResponse,该响应有很多的应用比如像浏览器输出消息下载文件实现验证码等。
一、response文件下载
1.创建一个javaweb的项目。
2.实例类FileServlet的具体实现。
import java.net.URLEncoder;
public class FileServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1.获取要下载文件的路径 realPath:绝对路径String realPath E:\\Software\\IDEA\\javaweb-02-servlet\\response\\src\\main\\resources\\aa.webp;System.out.println(文件下载的路径: realPath);
// 2.下载的文件名String fileName realPath.substring(realPath.lastIndexOf(\\) 1);
// 3.设置浏览器能够支持下载我们需要的东西
// 如果想让网站能下载东西需要搜一个下载文件的一个头。
// resp.setHeader(Content-disposition, attachment;filename fileName);resp.setHeader(Content-disposition, attachment;filename URLEncoder.encode(fileName,UTF-8));
// 4.获取下载文件的输入流。FileInputStream fis new FileInputStream(realPath);
// 5.创建缓冲区
// 6.获取OutputStream对象
// 7.将FileOutputStream流写入到缓冲区,使用OutputStream将缓冲区中的数据输出到客户端。ServletOutputStream oos resp.getOutputStream();byte[] buf new byte[1024];int len 0;while ((len fis.read(buf)) 0) {oos.write(buf, 0, len);}oos.close();fis.close();}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
3.配置web.xml文件及tomcat服务器。
4.启动服务。
5.回顾总结
(5.1思路分析 1.获取文件输入流2.获取web的响应的输出流3.将输入流写入到输出流进而发给客户端。 (5.2注意实项: 1.下载文件名 String fileName realPath.substring(realPath.lastIndexOf(\\) 1);- 2.下载文件的头resp.setHeader(Content-disposition, attachment;filename fileName);- 3.相关搜索二、response验证码实现
1.前置知识
下载文件需要一个响应头响应浏览器的类型是:
resp.setHeader(Content-disposition, attachment;filename fileName);而图片验证码需要设置 发送到客户端的响应的内容类型
resp.setContentType(image/jpg);
以jsp的形式发送的图片类型。
此外也可以是png,jepg等形式。还需要设置每60s刷新一次:
resp.setHeader(refresh,60);常见的内容类型
resp.setContentType(text/html);
以html的格式响应的文本类型即代表响应的是html页面。2.具体实现
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;public class ImageServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//如何让浏览器每60s自动刷新一次resp.setHeader(refresh,60);// 在内存中创建一个图片BufferedImage image new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);
// 得到图片Graphics2D g (Graphics2D) image.getGraphics();//笔来对图片进行操作
// 设置图片的背景颜色。---先选定颜色再添加一个填充的矩形。g.setColor(Color.WHITE);g.fillRect(0,0,80,20);// 给图片写数据g.setColor(Color.CYAN);g.setFont(new Font(null,Font.BOLD,20));g.drawString(makeNum(),0,20);// 告诉浏览器这个请求用图片的方式打开
// setContentType 设置发送到客户端的响应的内容类型resp.setContentType(image/jpg);
//网站存在缓存不让浏览器去缓存
// setHeader设置响应头
// setDateHeader 是设置页面缓存的,防止 JSP或者Servlet中的输出 被浏览器保存在缓冲区中。resp.setDateHeader(Expires,-1);//在代理服务器端防止缓冲resp.setHeader(Cache-Control,no-cache);resp.setHeader(Pragma,no-cache);// 把图片写给浏览器ImageIO.write(image,jpg,resp.getOutputStream());}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}private String makeNum(){Random random new Random();String numrandom.nextInt(9999999);StringBuffer sb new StringBuffer();//变化的字符串。for (int i0;i7-num.length();i){sb.append(0);}numsb.toString()num;return num;}
} 3.知识总结
(1)设置浏览器自动刷新。 (2)清除浏览器缓存。 (3)将图片写给浏览器。可以试试其他的内容比如音乐电影什么行不行 (4)设置客户端的响应内容形式为图片。 (5)内存中创建图片并通过画笔类进行操作。 (ImageIO是一个图片类专门写图片的。) (6)生成随机数。 画笔是如果要写文字要先选定颜色然后选定字体文本框在哪个位置开始写。
三、response重定向
如
resp.sendRedirect(/re/img1);
即 resp.sendRedirect(/项目映射名/跳转的页面的映射);也可以跳转到jsp页面。 实例代码
% page contentTypetext/html;charsetUTF-8 languagejava %
html
body
h2Hello World!/h2
%--这里提交的路径 需要寻找到项目的路径--%
form action${pageContext.request.contextPath}/login methodget用户名input typetext nameusername密码input typepassword namepasswordinput typesubmit
/form
/body
/htmlpublic class RedirectServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// redirect 重定向resp.sendRedirect(/re/img1);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}四、request转发
request处理请求 HTTP请求中的所有信息被封装到HttpServletRequest对象通过该对象的方法可以获取客户端的所有信息。 主要的获取参数的两种方法 实例代码
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitle登录/title
/head
body
h1登录/h1
div styletext-align: center
%--以post方式提交表单提交到我们的login请求--%form action${pageContext.request.contextPath}/login methodpost用户名input typetext nameusernamebr密码input typepassword namepasswordbr爱好input typecheckbox namehobbys value张三张三input typecheckbox namehobbys value李四李四input typecheckbox namehobbys value飞机飞机input typecheckbox namehobbys value蜘蛛蜘蛛brinput typesubmit/form
/div
/body
/html
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;/****/
public class LoginServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding(UTF-8);resp.setCharacterEncoding(UTF-8);String username req.getParameter(username);String password req.getParameter(password);String[] hobbys req.getParameterValues(hobbys);System.out.println();System.out.println(username:password);System.out.println(Arrays.toString(hobbys));System.out.println();
//请求转发 req
// /被解析成当前项目路径req.getRequestDispatcher(/success.jsp).forward(req,resp);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
五、重定向和转发的区别
相同点
页面都会实现跳转。
不同点
请求转发的时候url不会发生改变。 转发时 req.getRequestDispatcher(/success.jsp).forward(req,resp);重定向的时候url地址栏会发送改变。 重定向 resp.sendRedirect(/re/img1);