2012-08-31 31 views
2

我目前正在教授一個軟件工程類,其中約275名學生正在學習JSP。我希望能夠爲學生提供在線服務,使他們能夠練習基本的JSP技能。這個想法是,學生將提供一些JSP代碼來通過一些預先確定的測試。如何動態更新Java版Google App Engine中JSP文件的內容?

例如:學生將被要求提供JSP頁面的代碼,該頁面將返回「Hello NAME」,其中NAME是已傳入頁面的GET參數。

對此問題的正確答案是。

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

我目前可以測試學生提交的作業像這樣使用一個基於Linux的解決方案,我寫的提交學生碼出到現有JSP文件,獲取JSP頁面,同時傳遞GET參數,等待Tomcat來重裝並編譯JSP頁面,解析HTML結果,並將測試結果返回給學生。這個過程很慢(覆蓋磁盤上的JSP文件)並且不能很好地擴展。

我希望能夠在Java版本的Google App Engine上運行此JSP「驗證程序」,該程序可以配置爲在大量學生同時練習時自動擴展。

我的問題是,如何在Google App Engine中評估提交的JSP代碼而不能覆蓋現有JSP文件的內容?我可以將要運行的代碼傳遞給JSP頁面並讓該頁面返回結果嗎?

我無法弄清楚讓頁面使用傳入的代碼來處理傳入的GET參數。總之,我錯過了一個eval()方法。

任何想法?

+0

執行學生在任何沙箱外上傳的任意代碼聽起來非常非常危險。如果一些學生去'<%! System.exit(0); %>'(拒絕服務)或將文件從服務器傳輸到其他地方,例如其他學生上傳了JSP嗎?恐怕,我沒有一個好的解決方案來自動化測試不可信的JSP代碼。 –

+0

該代碼將在我的免費Google App Engine帳戶中運行,我可以在5秒後超時。我不期望有太大的傷害。我已經做了類似python和Java的問題。迄今沒有太多的濫用。 Google Sandbox非常好。 – Chris

+0

GAE沙盒旨在保護Google,而不是用您的應用做的傻事。如果您的應用程序有任何有趣的數據(例如應用程序源代碼或存儲在數據存儲區中的測試結果),並且在處理學生提交的代碼時沒有注意,那麼您只需要求學生讀取和寫入數據。 – allyourcode

回答

0

我從來沒有試過這個,但我想看看Jasper Compiler(Tomcat的JSP實現)。它可以從.jsp生成一個類文件,您可以從GAE加載。儘管我也可以想象得到它所需的努力可能太多了。

相關問題