2017-07-05 14 views
0

次のコードがありますが、/ data-upload URLにアクセスしようとすると" HTTPメソッドGETこのURLではサポートされていません "。JSPからサーブレットを呼び出すときにHTTPステータス405 - HTTPメソッドGETがサポートされない "エラー

Javaサーブレットコード:

package xyz.controllers; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
import org.apache.http.entity.StringEntity; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 

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

@WebServlet("/data-upload") 
public class GetLocalAreaIds extends HttpServlet { 

    // HTTP POST request 
    public void doPost(HttpServletRequest request, HttpResponse response) throws ServletException, IOException { 
     System.out.println("#VH in doPost method "); 
     String url = "http://xyz.xyz/search"; 

     HttpClient client = new DefaultHttpClient(); 
     HttpPost post = new HttpPost(url); 

     // add header 
     post.setHeader("Content-Type", "application/xml"); 

     String elementLocalNameType = request.getParameter("elementLocalNameType"); 
     System.out.println("#VH elementLocalNameType: " + elementLocalNameType); 

     String localAreaName = request.getParameter("localAreaName"); 
     System.out.println("#VH localAreaName: " + localAreaName); 

     StringEntity params = null; 
     try { 
      params = getStringEntityParams(elementLocalNameType, localAreaName); 
      System.out.println("#VH params: " + params); 
     } 
     catch (Exception e) { 
      System.out.println("Error while getting elementLocalNameType"); 
     } 

     post.setEntity(params); 
     response = client.execute(post); 
     System.out.println("\nSending 'POST' request to URL : " + url); 
     System.out.println("Post parameters : " + post.getEntity()); 
     System.out.println("Response Code : " + 
       response.getStatusLine().getStatusCode()); 

     BufferedReader rd = new BufferedReader(
       new InputStreamReader(response.getEntity().getContent())); 

     StringBuffer result = new StringBuffer(); 
     String line = ""; 
     while ((line = rd.readLine()) != null) { 
      result.append(line); 
     } 

     System.out.println("#VH result.toString(): " + result.toString()); 
    } 

    public void doGet(HttpServletRequest request, HttpResponse response) throws ServletException, IOException { 
     doPost(request, response); 
    } 

    private StringEntity getStringEntityParams(String elementLocalNameType, String localAreaName) throws Exception { 
     StringEntity params = new StringEntity("<request><workflow>get-element-values-workflow</workflow><get-element-values><element-localname>"+elementLocalNameType+"</element-localname><starts-with>"+localAreaName+"</starts-with><is-csv>True</is-csv></get-element-values></request>"); 
     return params; 
    } 
} 

JSPコード:

<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %> 
<%@ taglib prefix="user" uri="/WEB-INF/tlds/user.tld" %> 

<%@ page import="org.apache.http.client.HttpClient" %> 
<%@ page import="org.apache.http.client.methods.HttpGet" %> 
<%@ page import="org.apache.http.impl.client.DefaultHttpClient" %> 
<%@ page import="GetLocalAreaIds" %> 

<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %> 

<tiles:insertDefinition name="layout"> 
    <tiles:putAttribute name="title">Title</tiles:putAttribute> 

    <tiles:putAttribute name="main"> 

     <main id="content" role="main" class="group category-page"> 
      <header class="page-header group"> 
       <div class="full-width"> 
        <h1>Data Upload</h1> 
       </div> 
      </header> 

      <div class="browse-container full-width group"> 
         <div id="error"> 
         <p style="color: #ff0000">${error}</p> 
       </div> 

       <user:current-local-area msg="<b>LA:</b> !{#localAreaName}"/> 

       <c:set var = 'la_id' scope = 'session' value = '<user:current-local-area msg="!{#localAreaName}">'/> 

       <c:set var = "la_id"><user:current-local-area msg="!{#localAreaName}"/></c:set> 

       <jsp:useBean id="GetLocalAreaIds" class="GetLocalAreaIds"/> 


       <form action="${pageContext.request.contextPath}/data-upload" method="POST"> 
        <span>Do you want to download the LA IDs for families or individuals?</span><br /> 
        <input type="radio" name="elementLocalNameType" value="la-family-id"> Family IDs<br /> 
        <input type="radio" name="elementLocalNameType" value="la-individual-id"> Individual IDs<br /> 
        <input type="hidden" name="localAreaName" value="${la_id}"> 
        <input class="button" type="submit" value="Submit"> 
       </form> 

      </div> 

     </main> 
     </tiles:putAttribute> 
    </tiles:insertDefinition> 

私は同じ問題に対処する他の記事のいくつかを読んだことがあるが、その解決策は私のために動作しませんでした。 DoPostメソッドとdoGetメソッドに@Overrideを追加しようとすると、HttpServletを拡張しているにもかかわらず、「メソッドがスーパータイプのメソッドをオーバーライドまたは実装しない」というエラーが表示されます。

答えて

1

問題であり、両方を取得し、ポストはHttpServlet 変更

doPost(HttpServletRequest request, HttpResponse response) 

doPost(HttpServletRequest request, HttpServletResponse response) 

doGet(HttpServletRequest request, HttpResponse response) 

から継承されていません

EDIT 次の問題が

あなたが

org.apache.http.HttpResponse my_response = client.execute(post); 
... 
System.out.println("Response Code : " + 
       my_response.getStatusLine().getStatusCode()); 

     BufferedReader rd = new BufferedReader(
       new InputStreamReader(my_response.getEntity().getContent())); 

から"incompatible types: org.apache.http.HttpResponse cannot be converted to javax.servlet.http.HttpServletResponse"

変更しても注意を述べたように、あなたが出てユーザの応答には何も書いていない

response = client.execute(post); 

です、もしあなたがクライアントを呼び出すのに何も得なければ(例えば、ブラウザ)それは正常です。あるいは、あなたはstdoutのレスポンスを使ってすべてのことを書いています。

+0

おかげで、私はそれを試してみたが、今、私は、「互換性のない型を:org.apache.http.HttpResponseはjavax.servlet.http.HttpServletResponseのに変換することができません」と言ってコンパイルエラーを取得しています56行目に指して、これはresponse = client.execute(post)です。 – Victoria

+0

@Victoriaはインポートをチェックし、間違ったパッケージをインポートしました。 'org.apache.http.HttpResponse'を' javax.servlet.http.HttpServletResponse'に変更してください。 –

+0

org.apache.http.HttpResponseのインポート文を削除し、javax.servlet.http.HttpServletResponseをインポートしました。私はまだ同じエラーメッセージが表示されています)。 – Victoria

関連する問題