1.项目简介
仿照leetcode来写一个在线判题系统的项目,用户可以实现通过url在浏览器访问试题列表、选中相关题目并编写代码、提交到服务器编译运行、将结果反馈给浏览器展示在页面等相关操作。
2.核心功能
- 题目详情页面,显示题目的具体要求和代码模板,提供一个编辑框供用户来编辑代码,提交并显示出运行结果;
- 代码的编译、运行、测试功能,能够针对用户提交的代码,进行编译运行,并自动执行测试用例,返回测试结果;
3.开发环境
- maven :使用Maven来管理依赖,打包项目;
- MySQL:使用MySQL数据库作为业务数据的存储;
- Servlet:每个页面调用后台接口都需要使用哪些Servlet来完成业务;
- IDEA:进行Java代码的编写
- Linux:进行环境的部署
4.项目使用技术
- JDBC:用来实现数据库的操作;
- Runtime多进程:通过代码控制jdk进行编译和运行;
- Java:利用了Java的基础语法,继承、单例模式、异常等;
- Gson:用来在Java对象和JSON数据之间的转换;
5.项目模块介绍
5.1 编译模块
目标:给定以Java代码文件(这里只考虑单个文件的情况,不考虑多文件复杂工程的情况),能够通过代码并并控制jdk进行编译和运行
第一步:借助一个类:CommandUtil,让Java代码能够去执行一个具体的指令
Runtime类和Process类:这里我们需要在当前程序中调用另一个现成的系统命令,这样就利用利用Runtime类和Process类,可以创建一个子进程,并且让子进程来执行一个相关的命令(编译:javac,运行:java)
//1.获取Runtime对象,Runtime对象是一个单例的
Runtime runtime=Runtime.getRuntime();
//2.通过Runtime对象中的exec方法来执行一个指令
//相当于在命令行中输入cmd命令并执行
Process