Online Judge(OJ)搭建(第一版)
搭建 OJ 需要的知识(重要性排序):
Java SE(Basic Knowledge, String, FileWriter, JavaCompiler, URLClassLoader, SecurityManager, synchronized)
Java Virutal Machine(Classpath,Policy)
Servlet(HttpServlet)
JSP(Session, JSP, EL, JSTL, Custom Tags)
Tomcat(Classpath)
Java EE(JavaBean)
设计模式(MVC模式, Wrapper模式(我自己起的名字,即覆盖某一类改变特定的功能,其余功能不变))
HTML(HTTP)
OJ流程以及实现:
①在网页获取相关代码(HttpServlet从HTML中获取文本内容)
②保存(FileWriter)
③编译(JavaCompiler)
④执行(SecurityManager + Java Policy + ProcessBuilder 或者 Tomcat Policy + URLClassLoader)
流程图,http://blog.csdn.net/niluchen/article/details/8711586(我参考了一下,我的流程和他类似,但是实现很大程度上不同)。
OJ细节(对应流程步骤):
①在网页获取相关代码
A. 不用 JSP 写网页代码,这样很丑,而且不利于维护。 网页上要使用 JSP,使用 EL 和 JSTL,实在不行还有 Custom Tag。
B. 利用 urlPatterns 转入相应功能处理。
②保存
A. 用 JavaBean 存储相关代码信息。
B. 利用 FileWriter 写文件。
C. 利用 File 检查相关路径。
D. 文件处理经常发生异常,做好相关的处理机制。
E. 利用一个类来处理保存,编译,执行代码。
③ 编译
A. JavaCompiler 相关代码请 Google。
B. JavaComplier 可以收集编译错误,一旦有编译错误,就不用执行,转入错误页面。
④执行
X. 这一步为 OJ 的核心部分,OJ 需要很强的安全性。Java 的沙盒机制一定程度上保证了程序的安全性,然而 Tomcat 也有自己的、基于 Java 的安全机制。
A. 务必熟悉 JVM 相关安全机制:Java Policy, Java SecurityManager。
B. 务必熟悉 Tomcat Policy 配置。
分支1(SecurityManager + Java Policy + ProcessBuilder)
强烈不建议。Tomcat 涉及之初就有考虑到安全性问题,所以自定义了 Policy。并且 Tomcat 不使用当前系统的 Classpath,给 ProcessBuilder 构建 Java 程序的时候造成了极其大的麻烦;但如果你更改了 Classpath, 给 Tomcat 带来了极其大的安全隐患。
本人就由于 Tomcat 不使用当前系统的 Classpath 这一机制产生的问题困扰了两天。在普通环境下,ProcessBuilder 执行 Java 文件没有任何错误,然而在 Tomcat 环境下,ProcessBuilder 一直提示找不到或者无法加载类。后来我在 Eclipse 下启动 Tomcat(原先是在 cmd 下启动)发现可以编译。在 Google 搜索中发现了可能是 Classpath 的问题,于是我输出了不同环境下的 Classpath 进行对比,发现在 cmd 下 Tomcat 的 Classpath 只包括自身的 jar,并不包括 Java 编译时需要的 jar。后来我在 ProcessBuilder 中加入了 -cp 选项,发现还是不能运行,究其原因是 Tomcat 运行之后,禁止设置Classpath!后来又在配置文件中修改 Classpath(在 /bin/setenv.bat 添加 set classpath=yourClassPath),ProcessBuilder 才能执行 Java。
分支2(Tomcat Policy + URLClassLoader)
Tomcat Policy 就是 Java Policy,实现起来完全一样。
在做,能实现,有安全性保证。
第二版:
由于时间仓促,暂时粗略的做了第一版。第二版中想用 Docker 替代相关安全机制,Docker 更加安全。此外还计划用 Hibernate 构建用户数据库。当然,登陆系统也是必要的。
Online Judge(OJ)搭建(第一版)的更多相关文章
- CodeSnippet.info 开源说明 和 环境搭建 (第一版)
Github开源声明 本网站的代码开源,开源的目的如下 技术分享 希望业内同行贡献代码 希望能够让网站更加安全 开源地址: CodeSnippet开源地址 关于代码贡献 任何人都可以贡献代码,一般在 ...
- (二)OJ的主要文件
OJ搭建好了后,我们要熟悉一下OJ项目下的文件及文件夹. 首先,安装好的OJ是在目录var/www/html下. html下的php文件 这些php文件都是些主要跳转页面. admin文件夹 登录管理 ...
- virtual judge 本地部署方案
这是一种将自己的电脑当作服务器来部署一个vj的方法,我也是参考前辈们的做法稍作了改动,如果在服务器上部署的话需要在细节上稍作改动: 一.什么是Virtual Judge? vj的工作原理什么? vj ...
- 利用新浪云平台(SAE) 搭建 HUSTOJ 简易教程
前言: OnlineJudge(OJ)是一种代码在线判定平台,这里有许多的编程题目供你选择,你可以选择题目提交代码,OJ会自动返回你的代码的判定结果.是一种很方便的编程.算法练习平台.详情可见:百度百 ...
- 在线判题系统hustoj的搭建
摘要:ACM/ICPC程序设计竞赛,越来越受到各个高校的重视,是程序设计竞赛中的奥林匹克.Hustoj是搭建在linux系统上的判题系统.能够判断代码的正确性.会及时返回通过或者不通过,如果不通过会返 ...
- (一)在linux上ubuntu搭建hustOJ系统
同实验室有人在用java写签到系统,正好我在学习PHP,我就在想能不能在以前学长留下来一直没用OJ上添加一个签到功能. 于是说干就干,就找了许多关于hustoj的文章参考. 首先要说的是安装husto ...
- Online Judge(OJ)搭建——1、项目介绍
项目名 Piers 在线评测 项目需求 用户: 获取题库.题目的相关信息. 在线对代码进行编译.执行.保存.返回运行(编译)结果. 总体题目评测成绩查询. 用户信息服务,包括注册.登录.忘记密码.邮箱 ...
- Online Judge(OJ)搭建——5、配置
Spring 配置一些本地类,还有 HTML form 提交文件的解析器. package per.piers.onlineJudge.config; import org.springframewo ...
- Online Judge(OJ)搭建——2、数据库,SQL语句
数据库EER图 数据库表.字段.约束解释 users 用户: id 标识符,email 邮箱,password 密码,name 姓名,sex 性别,enabled 启用 ,role 角色 id pri ...
随机推荐
- Microservice Anti-patterns
在最近的一次Microservices Practitioner Summit中,原Netflix工程师介绍了一种越来越常见的对Microservice的误用.简单地说,大家在搭建一个基于Micros ...
- nodejs进阶(5)—接收请求参数
1. get请求参数接收 我们简单举一个需要接收参数的例子 如果有个查找功能,查找关键词需要从url里接收,http://localhost:8000/search?keyword=地球.通过前面的进 ...
- [.NET] 利用 async & await 进行异步 IO 操作
利用 async & await 进行异步 IO 操作 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6082673.html 序 上次,博主 ...
- H5坦克大战之【玩家控制坦克移动】
自从威少砍下45+11+11的大号三双之后,网上出现了各种各样的神级段子,有一条是这样的: 威少:Hey,哥们,最近过得咋样! 浓眉:对方开启了好友验证,请先添加对方为好友 威少:...... JRS ...
- 深入浅出JavaScript之闭包(Closure)
闭包(closure)是掌握Javascript从人门到深入一个非常重要的门槛,它是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.下面写下我的学习笔记~ 闭包-无处不 ...
- [算法]——快速排序(Quick Sort)
顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn).虽然从此角度讲,也有很多排序算法如归并排序.堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于 ...
- SharePonit 2010 更改另存为列表模板的语言类型
从朋友处得来一个列表模板:AccessApplicationSharePoint.stp 将其通过:网站操作----网站设置----列表模板,上传进去.然后去创建列表,发现找不到此模板. 根据多年老司 ...
- Android Studio快捷键
一.android studio 默认快捷键 刚开始接触一款开发软件,想必很想了解它的快捷方式,这会对你的编程起到很好的帮助,提高工作效率,接下来给你介绍下Android Studio一些常用的快 ...
- python select网络编程详细介绍
刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...
- WebAPI
WebAPI的Host OWIN IIS WebAPI 的handler和Filter有啥区别? WebAPI 常用 Filters Exception Filter Timer Filter Lo ...