I finally changed strategy and passed a servlet URI as first argument for terminal
function, which, thanks to GSON, can process JSON requests sent by the terminal and send a JSON response.
This is way cleaner :)
in Terminal.xhtml
jQuery(function($) {
$('#terminalPanel').terminal("terminalSerlvet", {
login: false,
greetings: "Javascript Interpreter",
tabcompletion: true,
completion: function(term, string, callback) {
callback(cmd);
}});
});
Servlet :
@WebServlet(urlPatterns = "/terminalSerlvet")
public class JSONTerminalServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
System.out.println("Entering JSONTerminalSerlvet#doPost...");
Gson gson = new Gson();
StringBuilder sb = new StringBuilder();
BufferedReader reader = request.getReader();
TerminalCommandData cmdData;
try {
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
cmdData = (TerminalCommandData) gson.fromJson(sb.toString(), TerminalCommandData.class);
} finally {
reader.close();
}
if (cmdData != null) {
// Write response data as JSON.
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(new Gson().toJson(buildJsonResponse(cmdData)));
}
}