1、首先创建一个登陆界面,代码如下:

package com.mx.servlet;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class servlet_pro extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();out.println("<h1>用户登录</h1>");  out.println("<form action='/hello/CLservlet' method='post'>");  //这是一个表单,action 就是把表单提交到什么地方,提交表单的过程就是向服务器发送  //请求的过程,其中 action 里面的书写方式为:/web 应用名/servlet 名  out.println("用户名<input type='text' name='username'/></br>");  out.println("密      码<input type='password' name='password'/></br>");  out.println("<input type='submit' value='登录'/></br>");  out.println("</form>"); }public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}}

2、创建登陆成功之后的跳转页面(下面这个是处理表单登陆程序,判断是否登陆成功):

package com.servletCL.servlet;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class CLservlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();String username=request.getParameter("username");  String password=request.getParameter("password");  out.println(username+"  "+password);  //用户名和密码验证,如果成功,则跳转到下一个页面,一般吧常量写在 equals 的前面  //可以避免空字符串的问题,比如 username 如果为空,那么就没有equals 方法  if("maxiao".equals(username)&& "123".equals(password)){  // sendRedirect 函数的URL 写法:/web 应用名/servlet 名,后面的  //这个servlet 名 是要跳转到的 servlet  response.sendRedirect("/hello/MainFrame");  }else{  response.sendRedirect("/hello/servlet_pro");  }  }public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}}

下面这个是登陆成功后的主界面:

package com.mx.view;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class MainFrame extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");  PrintWriter out = response.getWriter();  out.println("<h1>登录界面</h1>");  out.println("<body>");out.println("<a href='/hello/Download_servlet?filename=girl.jpg'>点击下载图片</a>");out.println("<a href='/hello/Download_servlet?filename=yinyue.mp3'>点击下载音乐</a>");out.println("<img src='images/hulu.jpg' height='950' weight='350'>");out.println("</body>");}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}}

3、 创建下载链接程序:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class Download_servlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset = utf-8");String filename = request.getParameter("filename");if("girl.jpg".equals(filename)){response.setHeader("content-Disposition", "attachment; filename=girl.jpg");//其中 attachment 里面的 filename 的名字写的什么,那么在下载框里面就显示什么名字,是给下载用户看的String path = this.getServletContext().getRealPath("/images/girl.jpg");FileInputStream fis = new FileInputStream(path);byte buff[] = new byte[1024];int len = 0;OutputStream os = response.getOutputStream();while((len=fis.read(buff))>0){os.write(buff, 0, len);}os.close();fis.close();}else if("yinyue.mp3".equals(filename)){response.setHeader("content-Disposition", "attachment; filename=music.mp3");String path = this.getServletContext().getRealPath("/music/yinyue.mp3");FileInputStream fis = new FileInputStream(path);byte buff[] = new byte[1024];int len = 0;OutputStream os = response.getOutputStream();while((len=fis.read(buff))>0){os.write(buff, 0, len);}os.close();fis.close();}}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}}

整个servlet 项目结构如下图所示:

一般资源文件放在 WebRoot 文件夹下,比如 images、music 等提供下载的资源文件(放在其他文件夹会不成功)

用servlet编写下载程序相关推荐

  1. cefsharp.wpf离线安装包下载_在vscode里编写c++程序(解决gdb下载失败问题)

    要在vscode编辑器里编写c++程序,分两步: 安装c++ 在vscode里配置 关于1: 网上很多人说在线安装MinGW,但我在安装时gbd一直安装失败.在同学的建议下,改用离线安装tdm-gcc ...

  2. java实验多线程机制_使用Java多线程的同步机制编写应用程序 PDF 下载

    使用Java多线程的同步机制编写应用程序 PDF 下载 本站整理下载: 相关截图: 主要内容: 一. 实验名称 使用Java多线程的同步机制编写应用程序 二. 实验目的及要求 1.理解并行/并发的概念 ...

  3. 编写一个程序,提示用户输入以兆位每秒(Mb/s)为单位的下载速度和以兆字节(MB)为单位的文件大小。程序中应计算文件的下载时间。

    编写一个程序,提示用户输入以兆位每秒(Mb/s)为单位的下载速度和以兆字节(MB)为单位的文件大小.程序中应计算文件的下载时间.注意,这里1字节等于8位.使用float类型,并用/作为除号.该程序要以 ...

  4. 利用PROGISP实现ARDUINO IDE编写的程序的下载以及如何把AVR单片机做成ARDUINO板

    首先讲讲题目的由来吧.我做的东西原本是利用ARDUINO MEGA2560及各种模块搭建起来的,程序自然也是用ARDUINO IDE写的.但这种东拼西凑的产品自然不够好,更主要的是,之前ARDUINO ...

  5. Fork and Join: Java也可以轻松地编写并发程序 原文地址 作者:Julien Ponge 译者:iDestiny 资源下载: Java SE 7 Sample Code(Zi

    Fork and Join: Java也可以轻松地编写并发程序 原文地址   作者:Julien Ponge 译者:iDestiny 资源下载: Java SE 7 Sample Code(Zip) ...

  6. android程序内下载文件,android文件下载代码 android程序 里如何编写下载代码

    android开发文件下载在手机报错 package cc.download; import android.app.Activity;import android.os我比任何人都懂你不会真的陪我到 ...

  7. 编写esp8266下载程序,语言C#

    esp8266是一款基于Wi-Fi的微控制器,它可以用于编写各种网络应用程序.使用C语言编写esp8266下载程序的步骤如下: 安装必要的软件工具,如开发板驱动程序.编译器.串口调试助手等. 在电脑上 ...

  8. 下载python流程-Python编写win程序的操作流程

    今天给大家讲的是Python怎样编写win程序的方法,对Python编写win程序的操作流程感兴趣的同学们就一起学习下具体方法吧! Python编写win程序的操作流程 1.在app.py同一目录下建 ...

  9. 服务器禁止head 请求_编写下载服务器。 第四部分:有效地执行HEAD操作

    服务器禁止head 请求 HEAD是一个经常被遗忘的HTTP方法(动词),其行为类似于GET,但不返回正文. 您使用HEAD来检查资源的存在(如果不存在,它应该返回404),并确保您的缓存中没有陈旧的 ...

  10. 502无法解析服务器标头_编写下载服务器。 第三部分:标头:内容长度和范围...

    502无法解析服务器标头 这次,我们将探索更多HTTP请求和响应标头,以改善下载服务器的实现: Content-length和Range . 前者表示下载量很大,后者允许部分下载文件,或者从我们开始的 ...

最新文章

  1. mysql5.5+版本与mysql5.5之前版本部署主从的一些差异
  2. springaop事务逻辑原理_架构师:一篇文章掌握——Spring 事务管理
  3. u-boot内核启动分析
  4. 【CyberSecurityLearning 11】OSI与TCP/IP协议簇以及Packet Tracer模拟器
  5. 目前主流的四大浏览器内核Trident、Gecko、WebKit以及Presto
  6. String对象的intern()
  7. LeetCode 1953. 你可以工作的最大周数
  8. Windows11怎么关机重启?Windows11的关机键在哪?
  9. leetcode每日一题:406.queue-reconstruction-by-height(根据升高重建队列)
  10. 将CMD内的显示内容输出到txt文件
  11. ceph进程启动流程
  12. 数据结构面试、数据结构考研复试——常见问题以及回答
  13. 小米商城网页制作(附源码)
  14. 移动魔百盒CM211-1_YS代工_S905L3B_RTL8822C_线刷固件包
  15. java 下载压缩文件后打开报 不可预料的压缩文件末端
  16. 浅谈英语学习兴趣的培养
  17. Balanced Sequence
  18. 计算机行业职业名称英语,行业英语学习
  19. 机器学习算法工程师面试学习经验
  20. 计算机词汇店名,有创意的店名大全

热门文章

  1. 面向对象组合及三大特性
  2. 【bzoj5166】[HAOI2014]遥感监测 贪心
  3. 电子工程师不得不读的十大经典书籍
  4. css3动画由浅入深总结
  5. sql 查询数据长度
  6. xcode6以后, 使用.pch
  7. JavaScript学习02 基础语法
  8. 剧情介绍:“遗愿清单”
  9. 1.Tow Sum(两数和)
  10. Mysql数据库的mysql Schema 究竟有哪些东西 手工注入的基础要领