2017-01-01 7 views
0

gif of file download pop up私はJSONの結果を表示するためにJavaサーブレットを実行する - それはhttpの代わりに、ファイルのダウンロードをポップアップ表示:// localhostを:8080/

どのように私は、以下の工程を経由することなく、ブラウザでJSON文字列をテストすることができますサーブレットを実行した後、ダウンロードしたjsonファイルをブラウザーで表示すると、ファイルダウンロードダイアログとしてjsonファイルをダウンロードします。郵便配達404

以下postman on localhost 8080

は、JSON文字列を正常に生成するビーン以下

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 

    <!-- General Description of the web application --> 

    <display-name>webData</display-name> 
    <description>data managed in web data table grid</description> 

    <!-- For directory request --> 

    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 

    <!-- Define servlets --> 

    <servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet> 
    <servlet-name>queryreturn</servlet-name> 
    <servlet-class>com.queryData.Return.QueryReturn</servlet-class> 
    </servlet> 

    <!-- Note: All <servlet> elements MUST be grouped together and 
     placed IN FRONT of the <servlet-mapping> elements --> 

    <!-- Define servlet's URL mapping -->  

    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/faces/*</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
    <servlet-name>queryreturn</servlet-name> 
    <url-pattern>/queryreturn</url-pattern> 
    </servlet-mapping> 

    <context-param> 
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>client</param-value> 
    </context-param> 

    <context-param> 
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> 
    <param-value>resources.application</param-value> 
    </context-param> 

    <listener> 
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class> 
    </listener> 

</web-app> 

マッピングのweb.xmlである返す - 以下

は、郵便配達のスクリーンショットでありますブラウザでは実行されません。

package com.queryData.Return; 
//Import required java libraries 
import java.io.*; 
import java.util.List; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import org.json.JSONObject; 
import com.queryData.main.Main; 
// Extend HttpServlet class 
public class QueryReturn extends HttpServlet 
{ 
    private static final long serialVersionUID = 1L; 
    public void init() throws ServletException 
     { 
      // Do required initialization 
     } 
     public void doGet(HttpServletRequest request, 
         HttpServletResponse response) 
       throws ServletException, IOException 
     { 
      Main m = new Main(); 
      List<JSONObject> jObj = m.getJsonObject(); 
      StringBuilder sb = new StringBuilder(); 
      for(int i =0 ; i < jObj.size(); i++) 
      { 
      sb.append(jObj.get(i).toString()); 
      }   
      String responseStr = "{\"data\":[" + sb + "]}"; 

      // Set response content type 
      response.setContentType("application/json"); 
      // Actual logic goes here. 
      PrintWriter out = response.getWriter(); 
      out.println(responseStr); 

     } 
     public void destroy() 
     { 
      // do nothing. 
     } 
} 
+0

郵便番号の画像と概要は、2つの異なるURLを参照しています。どちらが正しいですか? – nitind

+0

@nitind郵便配達員はlocalhost 8080用であり、サーブレット上で実行されるEclipseはlocalhost 8080には行かないので、FILE DOWNLOADがポップアップします.GIFが表示された場合は、その反応を見ることができます。 – Jon

+0

IEでブラウザにJSONを表示するように説得することができます。 http://stackoverflow.com/a/2492211/を参照してください。 –

答えて

1

見つかった!解決策は、まず、あなたがサーブレットから

response.setContentType("application/json;charset=UTF-8"); 

を削除し、二つの部分であり、そしてそれは、Eclipse内PERFECTとディスプレイを実行します。それであるナンヤン工科大学、シンガポール

article regarding the absolute URL for this servlet INCLUDES the Project name

、 (1)に、setContentType を外し、 (2)を使用 - 第二には、URLが間違っていた、私はこの信じられないほどの記事を設置 - READなければなりません。絶対URLプロジェクト名

http://localhost:8080/webData/queryreturn 
+0

良い仕事、ありがとう! – Gonza

0

Internet Explorerは "application/json"をテキストファイルとして処理します。あなたのコードには問題はありませんが、あなたのブラウザのおかげで迷惑です。

これは役立つかもしれない:What problems may using the MIME type application/json cause?

+0

はい、あなたは正しいです。 setContentTypeを削除するだけでした。私はこれをシンガポールのウェブサイトから大量のGoogle検索で見つけました。 – Jon

+0

'application/json'コンテンツタイプを保存してください。 FirefoxやChromeのような他のブラウザは、不一致のコンテンツタイプ(JSONが 'text/html'として返されるため)のため、スクリプトの解析をブロックします。 – Calvin

+0

いいえ... FirefoxとChromeとInternet Explorerだけでなく、Eclipseの内部ブラウ​​ザでも同じように動作します – Jon

0

あなたは郵便配達中にエラーの原因が正しくないURIによるものであるのWindows

+0

GetPostmanはすごくうまくいきました。私はプロジェクト名で絶対URLを持っています。ありがとうございました。 – Jon

0

ためhttps://insomnia.rest/、クロム、FireboxとSafariで https://github.com/wiztools/rest-clientをアドバンストレストクライアントのプラグインを使用することができます。アプリケーション名が見当たりません。これを試してください "http://localhost:8080/webData/queryreturn"

「ダウンロード」の理由は、contentTypeが正しくないことが原因です。実際のコードで正しいタイプが使用されていることを確認してください。ここでは、それは正常に見えます。

+0

はい、あなたは正しいです、私はシンガポールのサイトで、大規模なGoogleの検索 - トーンのソリューションを見つけました、ありがとうございます。 – Jon

0

私はあなたの質問と回答を読んでいました。私は行動がIEの問題だと思う。 Google Chrome、Mozilla、Operaなどを開くコードをチェックアウトしてください。あなたのコードはうまくいきます。あるいは、コンテンツタイプを「text/plain」に変更して確認することもできます。

堅牢でスケーラブルなRESTソリューションのためにSpringを試すことができます。サーブレットは(単純なもののために)良いです。

私はあなたがそれを得ることを望みます。よろしく!

+0

ありがとうございます。 HttpServletは私が使用したもので、現在Path(JAX-RS)またはRequestMapping(Spring)のいずれかを学習して使用することを決定しようとしています。 – Jon

+0

偉大なジョン、私はあなたにサーブレットの成功をお祈りします。 – Gonza

+0

ありがとう、私の残りの問題は、最初からどのように私のグリッドにデータをロードする - あなたは瞬間がある場合は、[リンク] http://stackoverflow.com/questions/41426096/paramqueryで私の次の投稿をご覧ください-wont-load-servlet-url-json-string [リンク] – Jon

関連する問題