【问题标题】:How can I dynamically update the contents of a JSP file in the Java version of Google App Engine?如何在 Java 版 Google App Engine 中动态更新 JSP 文件的内容?
【发布时间】:2012-08-26 01:58:11
【问题描述】:

我目前正在教授一门软件工程课程,其中大约 275 名学生正在学习 JSP。我希望能够为学生提供在线服务,使他们能够练习基本的 JSP 技能。这个想法是学生将提供一些 JSP 代码来通过一些预先确定的测试。

例如:将要求学生提供 JSP 页面的代码,该页面将返回“Hello NAME”,其中 NAME 是已传递到页面的 GET 参数。

对这个问题的正确回答是。

Hello <%= request.getParameter("name") %>

我目前可以使用基于 Linux 的解决方案测试这样的学生提交,我将提交的学生代码写入现有 JSP 文件,在传递 GET 参数的同时获取 JSP 页面,等待 Tomcat 重新加载并编译 JSP页面,解析 HTML 结果,并将测试结果返回给学生。这个过程相当慢(覆盖磁盘上的 JSP 文件)并且不能很好地扩展。

我希望能够在 Java 版本的 Google App Engine 上运行这个 JSP“验证器”,它可以配置为在大量学生同时练习时自动扩展。

我的问题是,如何在不覆盖现有 JSP 文件内容的情况下评估 Google App Engine 中提交的 JSP 代码?我可以将要运行的代码传递到 JSP 页面并让该页面返回结果吗?

我不知道让页面使用传入的代码来处理传入的 GET 参数。简而言之,我缺少一个 eval() 方法。

有什么想法吗?

【问题讨论】:

  • 在任何沙箱之外执行学生上传的任意代码听起来非常非常危险。如果某个学生使用&lt;%! System.exit(0); %&gt;(拒绝服务)或将文件从服务器传输到其他地方怎么办,例如其他学生上传了 JSP?恐怕我没有很好的解决方案来自动化测试不受信任的 JSP 代码。
  • 该代码将在我的免费 G​​oogle App Engine 帐户中运行,我可以在 5 秒后使该过程超时。我预计不会有太大的损失。我已经对 python 和 Java 问题做了类似的事情。到目前为止没有太多的滥用。谷歌沙盒相当不错。
  • GAE 沙盒旨在保护 Google,而不是您对应用程序所做的傻事。如果您的应用程序有任何类型的有趣数据(例如应用程序源代码或存储在数据存储中的测试结果),并且您不小心处理学生提交的代码,那么您只是在请求您的学生读取和写入您的数据.

标签: java google-app-engine jsp


【解决方案1】:

我从未尝试过这个,但我会查看Jasper Compiler(Tomcat 的 JSP 实现)。它可以从 .jsp 生成一个类文件,您可以从 GAE 加载该文件。虽然我也可以想象让它工作所需的努力可能太多了。

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 2011-04-05
    • 2011-08-13
    • 2012-08-27
    • 2021-10-19
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多