如何从jsp到servlet的数据发送和接收以及反过来不断进行的方法

发布时间:2020-07-06 20:12

我正在尝试将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},而无需中断,并且随时随地。

回答1