餐饮网站 设计,如何将图床作为wordpress的插件,珠海建站软件,wordpress 汉化 不变怀旧网个人博客网站地址#xff1a;怀旧网#xff0c;博客详情#xff1a;Response 和 Request 介绍 1、HttpServletResponse
1、简单分类 2、文件下载 通过Response下载文件数据
放一个文件到resources目录 编写下载文件Servlet文件
public class FileDownServlet exten…怀旧网个人博客网站地址怀旧网博客详情Response 和 Request 介绍 1、HttpServletResponse
1、简单分类 2、文件下载 通过Response下载文件数据
放一个文件到resources目录 编写下载文件Servlet文件
public class FileDownServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {// 1.获取要下载文件的路径String filePath D:\\Java Web\\JavaWebDemo\\ServletDemo\\src\\main\\resources\\1.png;// 2.获取文件的下载名客户端下载保存的时候的名字String downFileName filePath.substring(filePath.lastIndexOf(\\)1);// 3.设置让浏览器能够支持Content-Disposition下载我们需要的文件中文文件名URLEncoder。encode编码否则可能会乱码resp.setHeader(Content-Disposition, attachment;filename downFileName);// 4.获取下载文件的输入流FileInputStream fis new FileInputStream(filePath);// 5.创建缓冲区int len;byte[] buffer new byte[1024];// 6.获取OutputStream对象ServletOutputStream sos resp.getOutputStream();// 7.将文件流输出到ServletOutputStream中while((len fis.read(buffer)) ! -1){// 8.将数据输出到客户端sos.write(buffer, 0, len);}// 9.关闭文件的输入输出流sos.close();fis.close();}
} 编写下载映射xml
servletservlet-namedownFile/servlet-nameservlet-classcom.huaijiuwang.servlet.FileDownServlet/servlet-class
/servletservlet-mappingservlet-namedownFile/servlet-nameurl-pattern/downFile/url-pattern
/servlet-mapping访问测试localhost:8080/downFile 下载成功再次测试下载文件名为中文情况
修改代码
// 3.设置让浏览器能够支持Content-Disposition下载我们需要的文件中文文件名URLEncoder。encode编码否则可能会乱码
resp.setHeader(Content-Disposition, attachment;filename 怀旧.png);访问测试 文件名输出失败修改代码设置下载文件的编码
// 3.设置让浏览器能够支持Content-Disposition下载我们需要的文件中文文件名URLEncoder。encode编码否则可能会乱码
resp.setHeader(Content-Disposition, attachment;filename URLEncoder.encode(怀旧.png, utf-8));再次测试 显示成功
3、验证码功能
实现目的在浏览器端创建一个图片生成验证码让图片3秒刷新一次
编写Servlet
public class ToImageServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {// 设置浏览器3秒刷新一次resp.setHeader(refresh, 3);// 在内存中创建一个图片对象 · 参数1.图片宽度 2. 图片长度 3.图片颜色渲染类型BufferedImage image new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);// 得到图片对象Graphics2D graphics (Graphics2D) image.getGraphics();// 设置图片的背景颜色graphics.setColor(Color.WHITE);graphics.fillRect(0, 0, 80, 20);// 给图片写入数据// 设置当前画笔颜色graphics.setColor(Color.GREEN);// 设置当前画笔字体graphics.setFont(new Font(null, Font.BOLD, 20));// 设置当前的内容graphics.drawString(getData(), 0, 20);// 响应浏览器当前界面以图片形式打开resp.setContentType(image/jpeg);// 将当前图片输出到前端ImageIO.write(image, jpg, resp.getOutputStream());}public static String getData(){Random random new Random();return String.format(%06d, random.nextInt(999999));}
}编写访问映射xml
servletservlet-nameimage/servlet-nameservlet-classcom.huaijiuwang.servlet.ToImageServlet/servlet-class
/servletservlet-mappingservlet-nameimage/servlet-nameurl-pattern/image/url-pattern
/servlet-mapping访问测试 格3秒就自动刷新
4、实现重定向 编写代码实现重定向
public class RedirectServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.sendRedirect(/image);}
}编写访问映射文件
servletservlet-nameRedirect/servlet-nameservlet-classcom.huaijiuwang.servlet.RedirectServlet/servlet-class
/servletservlet-mappingservlet-nameRedirect/servlet-nameurl-pattern/red/url-pattern
/servlet-mapping访问测试 自动重定向到了image路径
修改tomcat配置 添加一个前缀
重新测试重定向
访问路径localhost:8080/hj/red 结果如下重定向的地址没有带hj前缀所以找不到 因为访问image需要带上hj前缀 这样就可以访问了所以在重定向的时候我们需要加上前面的前缀才可以修改代码
public class RedirectServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.sendRedirect(this.getServletContext().getContextPath() /image);}
}再次访问localhost:8080/hj/red得到结果如下 重定向成功并且带上了前缀
并且状态为302代表重定向并且url也改变了 2、HttpServletRequest
1、HttpServletRequest 介绍 HttpServletRequest 对象代表客户端的请求 当客户端/浏览器通过 HTTP 协议访问服务器时HTTP 请求头中的所有信息都封装在这个对象中 通过这个对象的方法可以获得客户端这些信息
2、HttpServletRequest 常用方法 getRequestURI() 获取请求的资源路径 getRequestURL()获取请求的统一资源定位符绝对路径 getRemoteHost() 获取客户端的 主机, getRemoteAddr() getHeader() 获取请求头 getParameter() 获取请求的参数 getParameterValues() 获取请求的参数多个值的时候使用, 比如 checkbox, 返回的数组 getMethod() 获取请求的方式 GET 或 POST setAttribute(key, value); 设置域数据 getAttribute(key); 获取域数据 getRequestDispatcher() 获取请求转发对象, 请求转发的核心对象
3、测试Request获取前端数据
编写处理登录请求的servlet
public class RequestTestServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取用户输入的数据String userName req.getParameter(userName);String passWord req.getParameter(passWord);// 判断用户输入if(huaijiu.equals(userName) 123456.equals(passWord)){// 登录成功重定向success地址resp.sendRedirect(this.getServletContext().getContextPath() /success.jsp);}else{// 登录失败重定向error地址resp.sendRedirect(this.getServletContext().getContextPath() /error.jsp);}}
}编写重定向成功或者失败地址 添加jsp所需maven依赖
dependencygroupIdjavax.servlet.jsp/groupIdartifactIdjsp-api/artifactIdversion2.2/version
/dependency编写发起请求的jsp代码 index.jsp
% page contentTypetext/html;charsetUTF-8 languagejava %
htmlheadtitle登录/title/headbody
%-- ${pageContext.request.contextPath} 获取前缀访问路径/hj--%form action${pageContext.request.contextPath}/login methodgetinput stylefont-size: 20px; typetext nameuserName /br /input stylefont-size: 20px; typepassword namepassWord /br /input typesubmit value登录 //form/body
/html
访问测试
输入错误的用户名或密码 成功重定向到了登录失败界面
输入正确的用户名密码 返回到登录成功的界面。
4 、HttpServletRequest 获取参数请求转发 和对应的response基本就是相对的
获取参数 常用的就两个
getParameter() 获取一个参数数据getParameterValues() 当传过来的一个数据名称但是数据多个的时候可以用这个方法例如前端传过来的多选框
4.1、测试获取参数
编写前端代码
% page contentTypetext/html;charsetUTF-8 languagejava %
htmlheadtitle登录/title/headbody
%-- ${pageContext.request.contextPath} 获取前缀访问路径/hj--%form action${pageContext.request.contextPath}/login methodpost用户名input stylefont-size: 20px; typetext nameuserName /br /密码input stylefont-size: 20px; typepassword namepassWord /br /爱好input typecheckbox value学习 namehobby /学习input typecheckbox value唱歌 namehobby /唱歌input typecheckbox value跳舞 namehobby /跳舞input typecheckbox value篮球 namehobby /篮球br /input typesubmit value登录 //form/body
/html后台获取数据代码
public class RequestTestServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取一个数据String userName req.getParameter(userName);String passWord req.getParameter(passWord);// 获取多个值String[] hobbies req.getParameterValues(hobby);// 打印输出结果System.out.println(userName : passWord);System.out.println(Arrays.toString(hobbies));}
}请求前端提交输入信息 成功请求,查看控制台的输出: 输出乱码
解决乱码问题: 添加下面的代码到获取数据的签名 req.setCharacterEncoding(utf-8);重新访问 成功解决乱码问题并且获取多条数据成功。
4.2、测试请求转发
添加转发代码
// 信息获取成功转发到成功登录的地址req.getRequestDispatcher(req.getContextPath() /success.jsp).forward(req, resp);访问/login地址 发现请求地址前缀有两个hj所以找不到界面报错404
查看原因
修改代码
req.getRequestDispatcher(/success.jsp).forward(req, resp);修改代码完转发
原因就是因为 在转发的时候默认会自己带上当前请求的前缀
req.getRequestDispatcher(success.jsp).forward(req, resp);同样转发成功.
在重定向的时候 url地址会发生变化 请求响应为 302在转发的时候 url地址不会发生变化 请求响应为 307