2012-02-08 16 views
0

次のコードは.javaファイルで正常に実行されますが、.jspファイルで実行しようとすると実行されません。jsp経由でネットビューコマンドを実行

IPアドレスとドメインを削除すると正常に実行されます。

jspページには、<%@ page import = "java.io. *"%>が含まれています。どんな助けもありがとう。ありがとうございました。

String[] commands = new String[]{"cmd", "/c", "net", "view", "IPADDRESSHERE", "/domain:DOMAIN"}; 

Runtime rt = Runtime.getRuntime(); 
Process pr = rt.exec(commands); 
BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream())); 
String strLine; 

while ((strLine = input.readLine()) != null) {  
System.out.println(strLine); 
} 

TestServlet.java

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class TestServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 

/** 
* @see HttpServlet#HttpServlet() 
*/ 
public TestServlet() { 
    super(); 
    // TODO Auto-generated constructor stub 
} 

/** 
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

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

    try { 

    Runtime rt = Runtime.getRuntime(); 
    Process pr = rt.exec("net view SHARENAMEGOESHERE"); 
    pr.wait(); 
    BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream())); 

    BufferedWriter output = new BufferedWriter(new FileWriter("networklist.properties", false)); 

    String [] nextLine; 
    String strLine; 
    String copied; 
    String newString = null; 
    StringBuilder toFile = new StringBuilder();     

    while ((strLine = input.readLine()) != null) { 

     out.println(strLine+"<br>");  

     if(strLine.indexOf("Print") != -1){ 

      copied = strLine;     
      copied = copied.replaceAll("\\s+", "");     
      nextLine = copied.split("Print"); 

      if(nextLine.length == 2){      
       newString = nextLine[1] + "=" + nextLine[0]+"\n"; 
       toFile.append(newString); 
       out.println(newString+"<br>"); 
      }     
     } 
    } 


    if(null != newString){ 
     output.write(toFile.toString()); 
    } 

    input.close(); 
    output.close(); 

    } catch (Exception e){ 
     e.printStackTrace(); 
     out.println(e.getMessage()); 
    } finally { 
     out.close(); 
    } 


} 

/** 
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    doGet(request,response); 
} 

}

+0

クライアントマシン(WebブラウザとJSPで生成されたHTMLコードが実行される)ではなく、サーバーマシン(WebサーバーとJava/JSPコードが実行される)でこのコードがコマンドを実行することはよく知っていますか? – BalusC

答えて

0

JSPでそれを実行しないでください。それをHttpServletで行い、必要に応じてJSPから呼び出します。 JSPは、この正確な理由のために複雑なJavaコードを内部に持つことを意図していません。問題をデバッグして特定するのは難しいです。

+0

私はちょうど何かをテストしていました。私はjava.io. *をインポートしました。出力のためにout.printを使用しました。 – tshenolo

0

一部のインポートステートメントが欠落しているようです。

さらにもう1つ、画面上にファイルを読み込もうとしていますか? System.out.printlnの代わりにout.printlnを使用する必要があります。 System.out.printlnは、ページ上ではなくコンソールで印刷されます。

これが役に立ちます。

私のアドバイスは、このコードをいくつかの適切なクラスのサーブレットまたはユーティリティクラスに移動する必要があります。

+0

はサーブレットを作成しましたが、まだ運が全くありません。コマンドラインからコードは魅力のように機能し、サーブレットを通して実行しようとすると、まったく動作しません。 – tshenolo

+0

どのように実行していますか?一部のサーバーにサーブレットをデプロイしましたか?そして、あなたが書いたサーブレットのコードを共有してください。そして確認するだけで、サーブレット/ JSPを呼び出すブラウザに出力が来るようにしたいのですか、それとも他に何かしたいのですか? – Amit

+0

上記サーブレットをチェックアウトしてください。サーブレットは、warファイルを通じてデプロイされ、tomcatで実行されます。コードはhttps://gist.github.com/1789774で見つけることができます – tshenolo

関連する問題