我正在尝试将Java控制台应用程序转换为Java EE Web应用程序,我有这个 index.jsp 文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>World Navigator</title>
</head>
<body>
<%
if(session.getAttribute("name") == null) {
response.sendRedirect("login/login.jsp");
}
session.setAttribute("writer", out);
%>
<textarea cols="50" rows="10" disabled>${command}</textarea>
<form action="/server" method="post">
<input class="form-control col-3" type="text" name="command">
<input class="btn btn-primary" type="submit" value="Submit">
</form>
</body>
</html>
和此 Server.java servlet文件
package server;// Import required java libraries
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.JspWriter;
// Extend HttpServlet class
public class Server extends HttpServlet {
private String message;
public void init() throws ServletException {
// Do required initialization
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
Game.Game(request.getSession(false));
// request.setAttribute("command", "This is the result of the servlet call");
// request.getRequestDispatcher("/index.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
public void destroy() {
// do nothing.
}
}
这是我已重命名的原始控制台应用程序的主要功能
package server;// Import required java libraries
import items.*;
import maps.Level1;
import player.*;
import javax.servlet.jsp.JspWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.JspWriter;
public class Game {
public static void Game(HttpSession session) throws Exception {
JspWriter localOut = (JspWriter)session.getAttribute("writer");
localOut.write("Welcome to the world navigator game");
localOut.write("Initializing Map...");
// Initialize Map
Level1 map = new Level1();
System.out.println("Initializing Player...");
// Initialize Player
Items inventory2 = new Items();
Player player = new Player(map.getStarterRoom(), 1000, inventory2,"");
// End of Initialization
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String command;
while (true) {
System.out.println("Available Commands :- quit/look/check/left/right/forward/backward/playerstatus/trade/restart/use/switchlights");
command = bufferedReader.readLine().trim().strip();
if (command.compareTo("quit") == 0) {
System.out.println("Exiting");
bufferedReader.close();
break;
}
else if (command.compareTo("look") == 0) { player.look(); }
else if (command.compareTo("check") == 0) { player.check(); }
else if (command.compareTo("left") == 0 || command.compareTo("right") == 0) { player.changeDirection(command); }
else if (command.compareTo("forward") == 0 || command.compareTo("backward") == 0) { player.walk(command); }
else if (command.compareTo("open") == 0) { player.open(); }
else if (command.compareTo("playerstatus") == 0) { player.status(); }
else if (command.compareTo("trade") == 0) { player.tradeMode(); }
else if (command.compareTo("restart") == 0) { restart(); }
else if (command.compareTo("use") == 0) { player.use(); }
else if (command.compareTo("switchlights") == 0) { player.turnOnLights(); }
}
bufferedReader.close();
}
private static void restart() throws Exception {
System.out.println("You have restarted the game");
Game.Game(null);
}
}
所以我想做的是将Game类中的System.out.println输出到index.jsp中的$ {command},而无需中断,并且随时随地。