搭建 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 ...
随机推荐
-
SpringMVC的执行流程(二)
文字解析: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配 DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交 ...
-
AngularJS介绍
AngularJS介绍–AngularJS的前世今生 AngularJS是什么 在Web开发领域,我们一般使用HTML作为前端页面元素的声明式语言,使用CSS技术作为展示样式的描述语言,JavaScr ...
-
使用ajax预加载图片
使用Ajax 上面所给出的方法似乎不够酷,那现在来看一个使用Ajax实现图片预加载的方法.该方法利用DOM,不仅仅预加载图片,还会预加载CSS.JavaScript等相关的东西.使用Ajax,比直接使 ...
-
【spoj7528】 Lexicographical Substring Search
http://www.spoj.com/problems/SUBLEX/ (题目链接) 题意 给出一个字符串,询问其中字典序第K小的子串. Solution 后缀自动机例题. 构出后缀自动机以后,对每 ...
-
jQuery操作之效果
jQuery操作之效果 效果操作一共分五类:1.基本,2.滑动,3.淡入淡出,4.自定义,5.设置 show(),hide(),toggle() 代码如下: html代码: <p style=& ...
-
UNIX网络编程——关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
1.阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有 区别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是 <0:出错,=0:连接关闭,>0接收到数据大小,特别:返回 ...
-
百度自动推送js
<!DOCTYPE html> <!-- saved from url=(0014)about:internet --> <html> <head> & ...
-
[PowerShell Utils] Create a list of virtual machines based on configuration read from a CSV file in Hyper-V
Hello everyone, this is the third post of the series. . Background =============== In my solution, ...
-
java的日期格式化
原博客地址: http://blog.csdn.net/yangbobo1992/article/details/9965105 日期格式: 时间日期标识符: yyyy:年 MM:月 dd:日 hh: ...
-
datagrid在MVC中的运用04-同时添加搜索和操作区域
本文介绍在datagrid上同时添加搜索和操作区域. 仅仅是增加操作区域 □ 方法1 $('#dg').datagrid({ toolbar: '#tb' }); <div id="t ...