Java Web学习笔记-重定向Redirect

本文介绍了一个使用Servlet实现的简单应用,该应用能够记录并显示网站上特定文件的下载次数。通过维护一个映射表来跟踪每个文件被下载的频率,并在用户请求下载时更新这些计数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用一个Servlet来统计文件的下载次数

package com.helloxr.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RedirectServlet extends HttpServlet {

    
    private static final long serialVersionUID = 19999999L;
    
    Map<String, Integer> map = new HashMap<String, Integer>();
    
    public void destroy() {
        map = null;
    }

    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        String filename = request.getParameter("filename");
        
        if(filename != null){
            int hit = map.get(filename);            // 取下载次数
            map.put(filename, ++hit);              // 下载次数加1后保存
            
            response.sendRedirect(request.getContextPath() + filename); // 重定向到文件
            
        }else{
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
            out.println("<HTML>");
            out.println("  <HEAD><TITLE>文件下载</TITLE></HEAD>");
            out.println("<link rel='stylesheet' type='text/css' href='../css/style.css' />");
            out.println("  <BODY>");
            out.println("<fieldset align='center' style='width:90%'><legend>文件下载</legend><br/>");
            out.println("<table width=100%>");
            out.println("   <tr>");
            out.println("        <td><b>文件名</b></td>");
            out.println("        <td><b>下载次数</b></td>");
            out.println("        <td><b>下载</b></td>");
            out.println("   </tr>");
            
            for(Entry<String, Integer> entry: map.entrySet()){
                out.println("<tr>");
                out.println("   <td>" + entry.getKey() + "</td>");
                out.println("   <td>" + entry.getValue() + "</td>");
                out.println("   <td><a href='"+ request.getRequestURI() + "?filename=" + entry.getKey() + "' target=' blank' onclick='location=locaction; '>下载</a></td>");
                out.println("</tr>");
            }
            out.println("</table>");
            out.println("  </fieldset>");
            out.println("  </BODY>");
            out.println("</HTML>");
            out.flush();
            out.close();
        }
    }
    
    @Override
    public void init() throws ServletException {
        map.put("/download/setup.exe", 0);
        map.put("/download/application.zip", 0);
        map.put("/download/01.mp3", 0);
    }

}

 

运行效果:

 

转载于:https://www.cnblogs.com/datapool/p/6262351.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值