2016-04-29 16 views
1

Webアプリケーションを開発しています.JavaでWebサイトURLを含む文字列を受け取り、WebサイトのHTMLを解析して情報を収集し、その情報を使用してpostgresqlデータベースを照会します。これは、すでにJava、HTML、JS、およびCSSを使用して書かれています。Webブラウザのクライアント入力をサーバーに渡すJavaソースコード

私のHTMLには、ユーザーがURLを貼り付けてボタンを使って送信できるテキスト入力ボックスがあります。私がやりたいことは、上のJavaコードで言及した文字列としてこのURLを取得し、それを自分でハードコーディングするのです。最終的に、そのURL HTMLファイルを解析し、データベース上で必要なクエリを実行した後、私はクエリ結果をブラウザに戻してユーザーに表示します。

私はJavaソースコードが異なる時にサーバー側であるうちに、JavaScriptがブラウザで実行されることを理解します。私は、JavaScriptと通信するJavaソースコードにHTTPServletRequestを提出することが可能な解決策であることを確認しました。しかし、私はこれを達成するための正しい手順が不明です。 XmlHTTPRequestは私が使用されているのを見たことのあるものです。

編集 - さらに読んだ後、私はJavaサーブレットをプログラミングするか、これを処理するJSPを決定します。私は、HTMLよりもJavaに精通しており、より多くのロジック(HTML解析、jdbcを使用したRDBMS照会、データの返送)を使用しているので、サーブレットに傾いています。

これは正しい判断のようですか?

私はこれを明確に言い、これが有効な質問であることを希望します。ありがとうございました!/EDIT

UPDATEはここで私はMois44の答えについて考えた後、これまで行ってきた私のコードです。私はxmlHttp.send()リクエストでURLをどのように置くべきか確信しています。私が言ったように、ブラウザにはテキストボックスがあり、ユーザには送信ボタンがあります。

エラー: url.html:91 POST http://localhost:8080/myapplication/GetURL?url=http://mywebsite.com/category/123986/webpage/ 404(見つかりません)

これは、これらのファイルのプロジェクト構造である:

src/main/ 
| 
|----java/ 
| | 
| |----path/to/java/servlet/myServlet.java 
| 
|----webapp/ 
    | 
    |----META-INF/ 
    | |----web.xml 
    | 
    |----pages/ 
     |----url.html 
    | 
    index.html 

のweb.xml:

<servlet> 
    <servlet-name>GetURL</servlet-name> 
    <servlet-class>path.to.java.servlet.myServlet</servlet-class> 

    <init-param> 
    <param-name>url</param-name> 
    <param-value>www.testurl.com</param-value> // don't I set this in my url.html from user? 
    </init-param> 

</servlet> 

<servlet-mapping> 
    <servlet-name>myServlet</servlet-name> 
    <url-pattern>/myServlet/*</url-pattern> // not sure about this... 
</servlet-mapping> 

url.html:

<div class="url-input"> 
    <input type="text" id="txtUrl" class="text-box" value="Paste recipe website URL here" align="middle"> 
    <button onclick="urlRequest()" id="myid" value="myvalue">Go!</button> 
     <script> 
      function getURL(xmlHttp) { 
       document.getElementById("myid").value = xmlHttp.responseText; 
       return document.getElementById("txtUrl").value 
      } 
     </script> 
     <script> 
      function urlRequest() { 
       var xmlHttp = new XMLHttpRequest(); 
       var url = getURL(xmlHttp); 
       xmlHttp.open('POST', 'http://localhost:8080/myapplication/GetURL?url='+url, true); 

       xmlHttp.onreadystatechange = function() { 
        if (xmlHttp.readyState = 4 && xmlHttp.status == 200) { 
         alert(xmlHttp.responseText); 
        } 
       }; 
       xmlHttp.send(url); 
      } 
     </script> 
</div> 

myServlet.java:あなたが既に知っているツールを使用したい場合は

public class Servlet extends HttpServlet { 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    handleRequest(request, response); 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
     handleRequest(request, response); 
    } 

    protected void handleRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

     String p = request.getParameter("url"); 
     System.out.println("test"); 
     System.out.println(p); 
    } 
} 

答えて

1

、JSFを使用します。

また、Javaサーバーに単純なHTTPエンドポイントを作成し、JavaScriptを使用して通信することもできます。 (あなたはHTTPペイロードとしてのHTTPペイロードをXmlHTTPRequestでサーバーに送信し、XML、JSONなどの形式(raw string?)で応答を受け取ります。 JavaScriptの一部の例:Javaで私は)

編集ジャクソンプロジェクトをお勧めします

// get user input from input field.. 
var userInput = document.getElementById("#my-input").value; 

xmlHttp = new XMLHttpRequest(); 
//   HTTP Method, URL, async 
xmlHttp.open('POST', '/myJavaEndPoint', true); 
// create onreadystatechange callback function, 
// it gets called everytime the readyState changes.. 
xmlHttp.onreadystatechange = function() { 
    // readyState 4 means "DONE" - request is complete, responseText now contains the full response.. 
    if (xmlHttp.readyState == 4) { 
     alert(xmlHttp.responseText); // Show the result to the user. 
    } 
}; 
xmlHttp.send(userInput); // Start Request, send the user input as post-payload 
+0

をあなたにMoisのありがとう!私は実際にはより多くのJavaScriptを学ぶ必要があるので、あなたが言及したように、後者のオプションを取り、JavaサーブレットでRESTful HTTPエンドポイントを作成すると思います。私はXmlHTTPRequestを使用し、それが唯一の属性なので、Javaの生の文字列として返すことができます。 私は自分のクエリを作成し、Jackson Projectを使用してJSON形式で結果を作成し、それをブラウザ側のユーザーが見ることができるJavaScriptの出力に戻すことができますか?これは正しいようですか?再度、感謝します! –

+1

はい、それは正しい! JSON形式とJacksonをレスポンスに使用する必要はありません。属性を文字列として送り返すだけです!クライアントサイドのJavaScriptコードの例を追加しました。 –

+0

私のURLが.open()コールのために必要なものを手伝ってもらえますか?元の投稿を自分の現在のコードで編集しました。送信ボタンを使用すると、インスペクタで404エラーが発生します。どうもありがとうございます! –

関連する問題