#javascript #java #html #rest #post
Вопрос:
Я хочу настроить свой Raspberry Pi в качестве веб-сервера. Используя ngrok и node.js Я настроил серверную часть и могу получить доступ к веб-страницам, которые я там написал (интерфейс).
Однако внутренняя часть доставляет мне много хлопот. Я очень новичок в этом, и, основываясь на некоторых уроках, которые я прошел, я использую джерси для бэкэнда. Я создал простой тест, чтобы проверить, работает ли моя реализация — отправьте имя пользователя по почтовому запросу и проверьте, не превышает ли длина 0.
Мой JSP-
lt;htmlgt; lt;headgt; lt;script type=text/javascriptgt; function verify() { var xhr = new XMLHttpRequest(); var u = document.getElementById("uname").value; //alert(u); xhr.open('POST', 'http://localhost:8080/webapi/myresource'); xhr.setRequestHeader('Content-Type', 'text/plain'); xhr.setRequestHeader("Accept", "text/plain"); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { alert(xhr.response); } } xhr.send(u); } lt;/scriptgt; lt;/headgt; lt;bodygt; lt;h3gt;User Login/Registerlt;/h3gt; lt;labelgt;Username: lt;/labelgt; lt;input type="text" placeholder="Enter username" name="uname" id="uname" requiredgt; lt;button onclick="verify()" id="v" gt;Check/Verifylt;/buttongt; lt;brgt;lt;labelgt;Password: lt;/labelgt; lt;input type="password" placeholder="Enter password" name="pwd" requiredgt; lt;brgt;lt;button type="submit"gt;Login/Registerlt;/buttongt; lt;/bodygt; lt;/htmlgt;
Мой MyResource.java файл —
package com.X.X; @Path("myresource") public class MyResource { @POST @Consumes(MediaType.TEXT_PLAIN) @Produces(MediaType.TEXT_PLAIN) public String verify(String uname) { if (uname.length()gt;0) return "Verified"; return "Unverified"; } }
Мой web.xml —
lt;welcome-file-listgt; lt;welcome-filegt;index.jsplt;/welcome-filegt; lt;/welcome-file-listgt; lt;servletgt; lt;servlet-namegt;Jersey Web Applicationlt;/servlet-namegt; lt;servlet-classgt;org.glassfish.jersey.servlet.ServletContainerlt;/servlet-classgt; lt;init-paramgt; lt;param-namegt;jersey.config.server.provider.packageslt;/param-namegt; lt;param-valuegt;com.resttest.resttestlt;/param-valuegt; lt;/init-paramgt; lt;load-on-startupgt;1lt;/load-on-startupgt; lt;/servletgt; lt;servlet-mappinggt; lt;servlet-namegt;Jersey Web Applicationlt;/servlet-namegt; lt;url-patterngt;/webapi/*lt;/url-patterngt; lt;/servlet-mappinggt;
Когда я ввожу имя пользователя и нажимаю «Подтвердить», я получаю ошибку 404 «ресурс не найден».
Что я делаю не так? Пожалуйста, помогите мне понять, что не так в моей реализации.
Ответ №1:
После недели разочарований, пытаясь определить свою проблему, я наконец понял, в чем дело.
В моем файле pom существует следующее —
lt;groupIdgt;com.resttestlt;/groupIdgt; lt;artifactIdgt;resttestlt;/artifactIdgt; lt;packaginggt;warlt;/packaginggt; lt;versiongt;0.0.1-SNAPSHOTlt;/versiongt; lt;namegt;resttestlt;/namegt;
Поэтому для каждого нового ресурса мне нужно перейти на локальный хост:8080/resttest/webapi* Я опустил «/resttest» и сосредоточился только на web.xml шаблон URL-адреса файла.
К сожалению, я определил это после публикации своего вопроса. Поскольку я видел здесь довольно много вопросов, подобных этому, я оставлю это здесь с этим ответом. Я надеюсь, что это кому-нибудь поможет в будущем.