Online Judge(OJ)搭建(第一版)

2023-08-01,,

搭建 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)搭建(第一版)的相关教程结束。

《Online Judge(OJ)搭建(第一版).doc》

下载本文的Word格式文档,以方便收藏与打印。