分享

springboot项目,servlet实现一个转盘抽奖程序

 KyunraWang 2017-03-23

继上面第二个springboot项目后,今晚应朋友需求帮忙写个抽奖程序,想着就用springboot+servlet去发布一个服务给前端直接调用或者后端直接调用。

下面来介绍一下:

1、不错,依然需要一个Application的启动springboot的入口

  1. import org.springframework.boot.SpringApplication;  
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;  
  3. import org.springframework.boot.web.servlet.ServletComponentScan;  
  4.   
  5. /** 
  6.  * Created by LK on 2016/5/7. 
  7.  */  
  8. @SpringBootApplication  
  9. @ServletComponentScan  
  10. public class SpringBootServletSampleApplication {  
  11.     public static void main(String[] args) {  
  12.         SpringApplication.run(SpringBootServletSampleApplication.class,args);  
  13.     }  
  14. }  

特别的注意一下,是通过使用注解注册Servlet    

@ServletComponentScan


2、下面就创建一个类来实现HttpServlet

  1. import javax.servlet.ServletException;  
  2. import javax.servlet.annotation.WebServlet;  
  3. import javax.servlet.http.HttpServlet;  
  4. import javax.servlet.http.HttpServletRequest;  
  5. import javax.servlet.http.HttpServletResponse;  
  6. import java.io.IOException;  
  7. import java.util.Random;  
  8.   
  9. /** 
  10.  * Created by LK on 2016/5/7. 
  11.  */  
  12. @WebServlet(urlPatterns = "/lottery/go",description = "请在前端ajax调用或者直接httpclient直接调用,可以返回抽奖结果,需要别的功能可以继续扩展")  
  13. public class LotteryServlet extends HttpServlet{  
  14.     @Override  
  15.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {  
  16.         this.doPost(req,resp);  
  17.     }  
  18.   
  19.     @Override  
  20.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {  
  21.         Object[][] prizeArr = new  Object[][]{  
  22.                 //奖品id,min,max,prize【奖项】,v【中奖率】  
  23.                 {1,1,14,"一等奖",1},  
  24.                 {2,346,364,"一等奖",1},  
  25.                 {3,16,44,"不要灰心",10},  
  26.                 {4,46,74,"神马也没有",10},  
  27.                 {5,76,104,"祝您好运",10},  
  28.                 {6,106,134,"二等奖",2},  
  29.                 {7,136,164,"再接再厉",10},  
  30.                 {8,166,194,"神马也没有",10},  
  31.                 {9,196,224,"运气先攒着",10},  
  32.                 {10,226,254,"三等奖",5},  
  33.                 {11,256,284,"要加油哦",10},  
  34.                 {12,286,314,"神马也没有",10},  
  35.                 {13,316,344,"谢谢参与",10}  
  36.         };  
  37.         Object result[] = award(prizeArr);//抽奖后返回角度和奖品等级  
  38.         resp.setContentType("text/html;charset=UTF-8");  
  39.         resp.getWriter().write("{\"angle\":\""+result[0]+"\",\"msg\":\""+result[2]+"\"}");  
  40.         System.out.println("转动角度:"+result[0]+"\t奖项ID:"+result[1]+"\t提示信息:"+result[2]);  
  41.     }  
  42.     //抽奖并返回角度和奖项  
  43.     public Object[] award(Object[][] prizeArr){  
  44.         //概率数组  
  45.         Integer obj[] = new Integer[prizeArr.length];  
  46.         for(int i=0;i<prizeArr.length;i++){  
  47.             obj[i] = (Integer) prizeArr[i][4];  
  48.         }  
  49.         Integer prizeId = getRand(obj); //根据概率获取奖项id  
  50.         //旋转角度  
  51.         int angle = new Random().nextInt((Integer)prizeArr[prizeId][2]-(Integer)prizeArr[prizeId][1])+(Integer)prizeArr[prizeId][1];  
  52.         String msg = (String) prizeArr[prizeId][3];//提示信息  
  53.         return new Object[]{angle,prizeId,msg};  
  54.     }  
  55.   
  56.     //根据概率获取奖项  
  57.     public Integer getRand(Integer obj[]){  
  58.         Integer result = null;  
  59.         try {  
  60.             int  sum = 0;//概率数组的总概率精度  
  61.             for(int i=0;i<obj.length;i++){  
  62.                 sum+=obj[i];  
  63.             }  
  64.             for(int i=0;i<obj.length;i++){//概率数组循环  
  65.                 int randomNum = new Random().nextInt(sum);//随机生成1到sum的整数  
  66.                 if(randomNum<obj[i]){//中奖  
  67.                     result = i;  
  68.                     break;  
  69.                 }else{  
  70.                     sum -=obj[i];  
  71.                 }  
  72.             }  
  73.         } catch (Exception e) {  
  74.             e.printStackTrace();  
  75.         }  
  76.         return result;  
  77.     }  
  78. }  

3、运行Application的main之后,直接浏览器访问 http://127.0.0.1:8080/lottery/Go  即可得到抽奖结果

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多