Comment obtenir les paramètres de requête de HttpServletRequest (Tomcat 9.0)?

Le serveur reçoit les demandes de deux clients - Raspberry Pi et l'application Android, à la fois envoyer des demandes à l'aide HttpURLConnection. J'ai besoin de passer des paramètres à ces demandes, l'e.g:

http://192.168.0.10:8080/MyProject/MyServer/rpi/checktask?rpi="rpi"

le fait de s':

String requestUrl = "http://192.168.0.10:8080/MyProject/MyServer/rpi";
String query = String.format("/checktask?rpi=%s",
                        URLEncoder.encode("rpi", "UTF-8"));
URL url = new URL(requestUrl + query);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setRequestProperty("Accept-Charset", "UTF-8");
conn.connect();

La Servlet a annotation:

@WebServlet(name = "MyServer", urlPatterns = { "/MyServer/rpi/*", "/MyServer/app/*"})

Mais quand Servlet reçoit la demande comme ci-dessus, voici ce qui arrive:

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

String path = request.getRequestURI();     ///MyProject/MyServer/rpi/*
String query = request.getQueryString();   //null
String context = request.getContextPath(); ///MyProject
String servlet = request.getServletPath(); ///MyServer/rpi
String info = request.getPathInfo();       ///*
}

Bien que, selon les réponses:
Comment utiliser @WebServlet à accepter des arguments (dans une bonne façon)?
et
Comment se fait demande de.getPathInfo() dans le service méthode renvoie null?

il devrait ressembler à ceci:

String path = request.getRequestURI();     ///MyProject/MyServer/rpi//checktask?rpi="rpi"
String query = request.getQueryString();   //rpi="rpi"
String context = request.getContextPath(); ///MyProject
String servlet = request.getServletPath(); ///MyServer/rpi
String info = request.getPathInfo();       ///checktask?rpi="rpi"

Ce que je fais mal?

  • Si vous essayez de frapper l'url manuellement (par exemple avec un navigateur), il fait le travail?
  • Il ne fonctionne pas tant que le navigateur et l'application.
  • Ma réponse était de la foutaise, désolé. Je suis un peu confus maintenant et je suis la lecture de la Servlet Spec, les centièmes de temps sur ce sujet .... 🙁
  • Êtes-vous vraiment essayer de transmettre des devis sur l'URL? Ce n'est pas une URL valide caractère. Passer en tant que %à 34. Voir aussi ce post
  • Êtes-vous sûr que vous avez appelé avec la bonne URL, comme indiqué dans la servlet commentaire, première ligne? Il s'agit de "/*" à la fin! Vous avez l'intention d'utiliser `checktask?rpi=rpi". J'ai essayé votre code source sur un Tomcat 8 et il fonctionne hors de la boîte.
  • Non, j'utilise URLEncoder pour la transmission de valeurs
  • Je ne comprends pas ce que tu veux dire par droit d'URL. J'utilise Tomcat 9, mais vais essayer sur Tomcat 8 de la même chose, peut-être que c'est le problème.
  • Ainsi, la suppression de "nom" de l'annotation ont permis de résoudre le problème, mais je n'ai aucune idée pourquoi.
  • Jetez un oeil à http://stackoverflow.com/questions/6535676/webservlet-annotation-with-tomcat-7il traite de l'attribut "name" de la @WebServlet annotation.

InformationsquelleAutor Katrikken | 2016-09-15