上章回顾:
介绍&测试的账户
代码介绍:
1 up.html 就是一个超级简单的首页
2. check_up.java
3.DOWN.java(文件下载源码)
上章回顾:
本文核心代码用到的io流
链接
IO流入门1
IO流入门二
介绍&测试的账户
点击访问:测试下载功能的链接
用户名 final
密码 123
代码介绍:
1 up.html 就是一个超级简单的首页
如图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登陆</title> </head> <body> <h1>这里是测试界面</h1> <!--假设登陆都是成功的--> <form action="/check_up" method="post"> 用户名:<input type="text" name="user"/><br/> 密 码:<input type="password" name="password"><br/> <input type="submit" value="登陆"> </form> </body> </html>
2. check_up.java
就是检查密码和用户名是否配对的
package com.final_.Servlet; 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; /** * @autor 笑霸fianl~ * 欢迎访问GitHub:https://github.com/XBfinal * 欢迎访问Gitee:https://gitee.com/XBfianl * 欢迎访问CSDN:https://blog.csdn.net/weixin_52062043 */ @WebServlet("/check_up") public class check_up extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取用户名和密码 //假定用户名是final 密码是123 String user=req.getParameter("user"); String password = req.getParameter("password"); //判断密码是否正确 if("final".equals(user) && "123".equals(password)){ //跳转去成功的页面 //设置编码 resp.setContentType("text/html;charset=utf-8"); PrintWriter writer = resp.getWriter(); writer.println("登陆成功。3秒后自动跳转"); resp.setHeader("Refresh","3;/html/suc.html"); }else{ resp.setContentType("text/html;charset=utf-8"); PrintWriter writer = resp.getWriter(); writer.println("登陆失败。3秒后自动跳转"); resp.setHeader("Refresh","3;/html/up.html"); } } }
3.DOWN.java(文件下载源码)
这里就是Servlet的核心代码
//获取要下载的文件的路径
//先获取当前工程的路径,然后在获取工程下的文件路径
//获取要下载的文件的路径 //先获取当前工程的路径,然后在获取工程下的文件路径 String filePath=this.getServletConfig().getServletContext().getRealPath("/"); String path=filePath+"1.png";
//设置下载的文件名//设置浏览器下载我们的资源
代码
//设置下载的文件名 String fileName = path.substring(path.lastIndexOf("\\") + 1); //设置浏览器下载我们的资源 resp.setHeader("Content-disposition","attachment;filename="+fileName);//web下载文件的消息
//获取下载文件的流//关闭资源
//获取下载文件的流 FileInputStream filein = new FileInputStream(path);//根据路径 //创建缓冲区 int len=0; byte[] by=new byte[1024]; //获得输出流对象 ServletOutputStream outputStream = resp.getOutputStream(); //写入缓冲区 while((len=filein.read(by))>0){ outputStream.write(by,0,len); } //关闭资源 filein.close(); outputStream.close();
全部代码
package com.final_.Servlet; import javax.servlet.ServletContext; 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.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; /** * @autor 笑霸fianl~ * 欢迎访问GitHub:https://github.com/XBfinal * 欢迎访问Gitee:https://gitee.com/XBfianl * 欢迎访问CSDN:https://blog.csdn.net/weixin_52062043 * 在配置路径的时候,需要写一个相对路径。例如,先获得项目路径在获得文件路径 。 * 这样不论项目放在什么路径下,访问的时候都会先去找项目路径, * 之后在项目路径下找到文件路径。 */ @WebServlet("/DOWN") public class DOWN extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取要下载的文件的路径 //先获取当前工程的路径,然后在获取工程下的文件路径 String filePath=this.getServletConfig().getServletContext().getRealPath("/"); String path=filePath+"1.png"; System.out.println(path+"\n"+filePath); //设置下载的文件名 String fileName = path.substring(path.lastIndexOf("\\") + 1); //设置浏览器下载我们的资源 resp.setHeader("Content-disposition","attachment;filename="+fileName);//web下载文件的消息 //获取下载文件的流 FileInputStream filein = new FileInputStream(path);//根据路径 //创建缓冲区 int len=0; byte[] by=new byte[1024]; //获得输出流对象 ServletOutputStream outputStream = resp.getOutputStream(); //写入缓冲区 while((len=filein.read(by))>0){ outputStream.write(by,0,len); } filein.close(); outputStream.close(); } }