0

jspページのボタンをクリックして開始および停止する.exeファイルがあります。jsp ページのボタンをクリックすると、.exe ファイルが起動し、そのログが .txt ファイルに配置されます。たとえば、txt ファイルは C:\Debug\logfile.txt にあります。問題は、[開始] をクリックすると、.exe ファイルが開始され、そのデータが指定されたログ ファイルに表示されますが、出力が jsp ページに出力されないことです。.exe ファイルを停止すると、指定したログ ファイルと jsp ページの両方にログが表示されます。この問題の解決にご協力ください。以下は、.exe ファイルの停止と開始の両方のコード スニペットです。

exeファイルを開始するためのサーブレット:

protected void doGet(HttpServletRequest req, HttpServletResponse res) throws 
IOException {

             try{



                  String browsefile = req.getParameter("browsefile");

                  if(browsefile == null || browsefile.equals("")){

                      throw new ServletException("File Name can't be 
null or empty");

                  }

                  File file = new File("C:/lic/test.lic");

                  if(!file.exists()){

                      throw new ServletException("File doesn't exists 
on server.");

                  }

                 res.setContentType("text/html;charset=UTF-8");  
                    PrintWriter out = res.getWriter();

                    Runtime rt = Runtime.getRuntime();
                    Process pr = rt.exec("C:\\tools\\server\\grd.exe -l[+]  
C:\\Debug\\logfile.txt" );

                    BufferedReader stdInput = new BufferedReader(new 
InputStreamReader(pr.getInputStream()));
                    BufferedReader input = new BufferedReader(stdInput);
                    String serverstarted="";
                    StringBuffer startOutput = new StringBuffer();
                            while((serverstarted = input.readLine()) != 
null){
                                startOutput.append
(serverstarted      + "\n");
                            }

                            req.setAttribute("startOutput", 
startOutput.toString());
                            req.getRequestDispatcher
("grdoptions.jsp").forward(req, res);
                }catch (Throwable t)  
                  {  
                    t.printStackTrace();  
                  }  


                finally {  

                }  }

}

.exe ファイルを停止するためのサーブレット:

protected void doGet(HttpServletRequest req, HttpServletResponse res) throws 
IOException {

             try{

                  res.setContentType("text/html;charset=UTF-8");  
                  PrintWriter out = res.getWriter();

                  Runtime rt = Runtime.getRuntime();
                  Process pr = rt.exec("cmd /c taskkill /F /IM grd.exe");

                  BufferedReader stdInput = new BufferedReader(new 
InputStreamReader(pr.getInputStream()));
                  BufferedReader input = new BufferedReader(stdInput);
                    String stop="";
                    StringBuffer stopOutput = new StringBuffer();
                            while((stop = input.readLine()) != null){
                                //out.println(stop);
                                stopOutput.append(stop + "\n");
                            }

                            req.setAttribute("stopOutput", 
stopOutput.toString());
                            req.getRequestDispatcher
("grdoptions.jsp").forward(req, res);

                  //  out.println("Command has been stopped");


                }catch (Throwable t)  
                  {  
                    t.printStackTrace();  
                  }  


                finally {  

                }  }

}

jsp コード:

<table cellspacing="5" cellpadding="1" border="0">
    <tr>
            <td>Start Server</td>
            <td>
            <div id="start">
            <form action="start" METHOD="GET" 
enctype="multipart/form-data">
            <input type="file" name=browsefile size="150" />
            <input type="submit" name="start" 
value="StartServer" />
            </form>
            </div>
            <div id="result">
                            <pre>
    ${requestScope.startOutput}
</pre>
                        </div>
            </td>
            </tr>
    </table>
    <BR>

    <table cellspacing="5" cellpadding="1" border="0">
    <tr>
            <td>Stop Server</td>
            <td>
            <div id="stop">
            <form action="stop" METHOD="GET">
                <input type="submit" name="txtSubmit2" 
id="txtSubmit" value="StopServer" />
            </form>
            </div>
            <div id="result">
                            <pre>
    ${requestScope.stopOutput}
</pre>
                        </div>
            </td>
            </tr>
    </table>

Web.XML:

<servlet>       
    <servlet-name>Start</servlet-name>
    <servlet-class>com.abc.def.lic.Start</servlet-class>

</servlet>
<servlet>       
    <servlet-name>Stop</servlet-name>
    <servlet-class>com.abc.def.lic.Stop</servlet-class>
</servlet>

    <servlet-mapping>
    <servlet-name>Start</servlet-name>
    <url-pattern>/start</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Stop</servlet-name>
    <url-pattern>/stop</url-pattern>
</servlet-mapping>

私が考え出したのは、 Process pr = rt.exec("C:\tools\server\grd.exe -l[+]
C:\Debug\logfile.txt" );を使用していることです。exeファイルを開始し、logfile.txtのデータを出力します。これにより、出力がjspページに出力されなくなります。-l[+] C:\Debug\logfile.txt を削除すると、Web ページに出力が出力されます。しかし、Web ページと logfile.txt の両方に出力が必要です。

4

0 に答える 0