次のコードがありますが、/ 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を拡張しているにもかかわらず、「メソッドがスーパータイプのメソッドをオーバーライドまたは実装しない」というエラーが表示されます。
おかげで、私はそれを試してみたが、今、私は、「互換性のない型を:org.apache.http.HttpResponseはjavax.servlet.http.HttpServletResponseのに変換することができません」と言ってコンパイルエラーを取得しています56行目に指して、これはresponse = client.execute(post)です。 – Victoria
@Victoriaはインポートをチェックし、間違ったパッケージをインポートしました。 'org.apache.http.HttpResponse'を' javax.servlet.http.HttpServletResponse'に変更してください。 –
org.apache.http.HttpResponseのインポート文を削除し、javax.servlet.http.HttpServletResponseをインポートしました。私はまだ同じエラーメッセージが表示されています)。 – Victoria