Как показывать сообщения на jsp страницах - PullRequest
1 голос
/ 28 апреля 2020

Я абсолютный новичок в jsp, и мне нужно показать сообщение до и после простого вычисления. В Eclipse я сделал индекс. html в качестве главной страницы, тестовый запуск. html для запуска сервлета, сервлет TEST. java для выполнения вычислений и отображения сообщений и testmsg. jsp для отображения сообщения в параметре $ message. когда я пытаюсь запустить проект, testmsg. jsp не показывает никаких сообщений, и я также получаю сообщение об ошибке. Я пытался ответить на вопрос 1824409 , но безуспешно. Может кто-нибудь помочь мне понять, почему thetestmsg. jsp не работает, и я получаю ошибку?

спасибо

Ошибка

Show the waiting message


Computing


Show the end message
apr 28, 2020 12:14:04 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [com.prevendis.controller.TEST] in context with path [/MktPortal] threw exception
java.lang.IllegalStateException: Cannot forward after response has been committed
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:323)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
    at com.prevendis.controller.TEST.doGet(TEST.java:47)
    at com.prevendis.controller.TEST.doPost(TEST.java:42)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:821)

apr 28, 2020 12:30:17 PM org.apache.catalina.core.StandardContext reload
INFORMAZIONI: Reloading Context with name [/MktPortal] has started
apr 28, 2020 12:30:19 PM org.apache.jasper.servlet.TldScanner scanJars
INFORMAZIONI: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
apr 28, 2020 12:30:19 PM org.apache.catalina.core.StandardContext reload
INFORMAZIONI: Reloading Context with name [/MktPortal] is completed

index. html

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Test</title>
</head>
<body>
    <h1>
        <p align="center">TEST</p>
    </h1>
    <a href="./testrun.html"> Run the test</a>
</body>
</html>

testrun. html

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>test</title>
</head>
<body>
    <h1>
        <p align="center">TEST</p>
    </h1>
    Press OK button to run the test
    <br>
    <br>
    <form method="POST" action="Test.do">
        <input type="submit" value="Ok" id="button-1" />
    </form>
</body>
</html>

TEST. java

package com.prevendis.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



/**
 * Servlet implementation class PreVenDisElab
 */
@WebServlet(description = "Computing TEST", urlPatterns = { "/Test.do" })
public class TEST extends HttpServlet {

    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public TEST() {
        super();
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Show the waiting message");
        doGet(request, response,"Start computing");

        System.out.println("\n\nComputing\n\n");
        int result = 1+1;

        System.out.println("Show the end message");
        doGet(request, response,"End computing");
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response, String msg) throws ServletException, IOException {
        Object data = msg;
        request.setAttribute("message", data);
        request.getRequestDispatcher("/WEB-INF/testmsg.jsp").forward(request, response);
    }
}


testmsg. jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Test</title>
</head>
<body>
    <h1><center>Test</center></h1>

    <p>
    <h2> ${message}</h2>
    <br>
    </p>

</body>
</html>

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Ваш код отправляет doGet(request, response,"Start computing"); и doGet(request, response,"End computing"); два раза в методе doPost. из-за этого сервлет отправит ответ, т.е.: request.getRequestDispatcher("/WEB-INF/testmsg.jsp").. при первом вызове метода doGet(), и при повторном вызове этого метода вы получите ошибку Cannot forward after response has been committed. Вместо этого, почему бы вам не сделать, как показано ниже в вашем doGet методе:

    Object data = msg;
    if(msg.equals("End computing")){
    request.setAttribute("message", data);
    request.getRequestDispatcher("/WEB-INF/testmsg.jsp").forward(request, response);
    }
0 голосов
/ 28 апреля 2020

Ваш RequestDispatcher недействителен, измените на

request.getRequestDispatcher("testmsg.jsp").forward(request, response);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...