我的第三个springboot项目,servlet实现一个转盘抽奖程序

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

下面来介绍一下:

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

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

/**
 * Created by LK on 2016/5/7.
 */
@SpringBootApplication
@ServletComponentScan
public class SpringBootServletSampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootServletSampleApplication.class,args);
    }
}

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

@ServletComponentScan

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

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.util.Random;

/**
 * Created by LK on 2016/5/7.
 */
@WebServlet(urlPatterns = "/lottery/go",description = "请在前端ajax调用或者直接httpclient直接调用,可以返回抽奖结果,需要别的功能可以继续扩展")
public class LotteryServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Object[][] prizeArr = new  Object[][]{
                //奖品id,min,max,prize【奖项】,v【中奖率】
                {1,1,14,"一等奖",1},
                {2,346,364,"一等奖",1},
                {3,16,44,"不要灰心",10},
                {4,46,74,"神马也没有",10},
                {5,76,104,"祝您好运",10},
                {6,106,134,"二等奖",2},
                {7,136,164,"再接再厉",10},
                {8,166,194,"神马也没有",10},
                {9,196,224,"运气先攒着",10},
                {10,226,254,"三等奖",5},
                {11,256,284,"要加油哦",10},
                {12,286,314,"神马也没有",10},
                {13,316,344,"谢谢参与",10}
        };
        Object result[] = award(prizeArr);//抽奖后返回角度和奖品等级
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().write("{\"angle\":\""+result[0]+"\",\"msg\":\""+result[2]+"\"}");
        System.out.println("转动角度:"+result[0]+"\t奖项ID:"+result[1]+"\t提示信息:"+result[2]);
    }
    //抽奖并返回角度和奖项
    public Object[] award(Object[][] prizeArr){
        //概率数组
        Integer obj[] = new Integer[prizeArr.length];
        for(int i=0;i<prizeArr.length;i++){
            obj[i] = (Integer) prizeArr[i][4];
        }
        Integer prizeId = getRand(obj); //根据概率获取奖项id
        //旋转角度
        int angle = new Random().nextInt((Integer)prizeArr[prizeId][2]-(Integer)prizeArr[prizeId][1])+(Integer)prizeArr[prizeId][1];
        String msg = (String) prizeArr[prizeId][3];//提示信息
        return new Object[]{angle,prizeId,msg};
    }

    //根据概率获取奖项
    public Integer getRand(Integer obj[]){
        Integer result = null;
        try {
            int  sum = 0;//概率数组的总概率精度
            for(int i=0;i<obj.length;i++){
                sum+=obj[i];
            }
            for(int i=0;i<obj.length;i++){//概率数组循环
                int randomNum = new Random().nextInt(sum);//随机生成1到sum的整数
                if(randomNum<obj[i]){//中奖
                    result = i;
                    break;
                }else{
                    sum -=obj[i];
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
}

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

时间: 2024-10-13 04:15:18

我的第三个springboot项目,servlet实现一个转盘抽奖程序的相关文章

SpringBoot入门基础:构建SpringBoot项目及启动器讲解(二)

一. 使用Spring开发一个"HelloWorld"的web应用 创建一个web项目并且导入相关的jar包.SpringMVC Servlet 创建一个web.xml 编写一个控制类(Controller) 需要一个部署web应用的服务器,如tomcat 二. SpringBoot特点 SpringBoot设计目的是用来简化新Spring应用的初始搭建以及开发过程 嵌入的tomcat,无需部署war文件 SpringBoot并不是对Spring功能上的增强,而是提供了一种快速使用Sp

使用 lntelliJ IDEA 创建 Maven 工程的springboot项目

IntelliJ IDEA 为后起之秀 得到了越来 广泛 应用.下面的idea软件的界面详情 二.使用 IntelliJ IDEA Maven 工程步骤如下: 2.1 依次选择“file”.“new"."project",创建新项目.出现下面的界面,创建项目时选择 Mave ,但 不必选择项目骨架 直接单击 Next 按钮即可 2.2.输入组织名称.模块名称.项 版本号等信息 2.3.选择项目位置,然后单击 Finish 按钮, 完成项目创建 三 三.springboot项目

SpringBoot 项目运行在 tomcat7 上

SpringBoot 项目如何打成 war 包 SpringBoot项目的默认打包方式是将工程打包成为一个 jar 包.部分情况下,我们需要将项目打包成一个 war 包,以方便我们将工程部署在 tomcat 上运行. 那如何将 SpringBoot 项目打包成一个 war 包呢? pom 文件修改 修改打包方式.由于 SpringBoot 的默认打包方式将其打包成 jar 包,所以创建出来的项目的 pom是没有特殊声明 packaging 的元素.所以首先要在 pom 坐标处增加<packagi

用docker部署springboot项目

创建springboot项目,编写一个简单的hello world controller 下面是效果图. 下面是pom.xml 文件. 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.

实现android&quot;转盘抽奖&quot;小项目后感想

我这次做的小项目是android的转盘抽奖,因为这个小项目中有进程的调度,加锁等细节,而我们组的竞赛系统中也有这样的问题.通过这次的实践我发现了自己的好多问题也学到了很多. 个人问题: 1.自己的动手实践能力还差很多,而且解决问题的耐心还是不行. 2.虽然现在看视频做了出来,可是我觉得还是没有理解很透侧,关掉视频让自己再做一次我不一定能做的出来 学到知识点: 1.SurfaceHolder的使用,surfaceCreate,surfaceChange,surfaceDestroy的使用 2.了解

关于项目重构,知道真相的程序员眼泪笑了出来

本文授权转载,作者:非著名程序员(公众号:smart_android) 其实过完年回来,我们的项目也一直在强调重构,在实践重构中,但是到目前为止,基本没啥进度.关于项目的重构,我说:基本上大部分都是骗人的.你们信不信?那你可能会问:为什么一开始不把代码写的更好一些,逻辑更严密一些呢?那欢迎大家看我写的这篇文章<代码质量差,bug多?我们都是被逼的 >,看完你会深有同感的. 关于项目重构的问题,为什么一直做不完呢?直到我在浏览微博时,看到了一个非常好玩的对话,可谓是:感同身受,深有同感.知道真相

完成一个springboot项目的完整总结-------二

我们接着上篇继续写,继续进行springboot项目 一. swagger2 接口描述,测试每个接口是否有效 1. 添加依赖 pom.xml 在编辑pom.xml之前,要先关闭spring-boot项目 eclipse 编辑pom.xml.当编辑完毕保存pom.xml后eclipse会帮我们自动下载依赖.eclipse这个自动化操作可能会出现一些问题. mvn install <dependency> <groupId>io.springfox</groupId> &l

SpringBoot项目打war包部署Tomcat教程

一.简介 正常来说SpringBoot项目就直接用jar包来启动,使用它内部的tomcat实现微服务,但有些时候可能有部署到外部tomcat的需求,本教程就讲解一下如何操作 二.修改pom.xml 将要部署的module的pom.xml文件<packaging>节点设置为war <!-- 默认打包方式为jar,如果是用module做父级则需要修改为pom,如果使用外部tomcat可以修改为war, 子级module的打包方式只能是jar或者war --> <packaging

皕杰报表集成到springboot项目

一.maven构建项目1.访问http://start.spring.io/2.选择构建工具Maven Project.Spring Boot版本2.0.5以及一些工程基本信息,点击"Switch to the full version."java版本选择8,可参考下图所示:3.点击Generate Project下载项目压缩包4.解压后,使用eclipse,Import -〉 Existing Maven Projects -〉 Next -〉选择解压后的文件夹-〉 Finsh,OK