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.
Vous devez vous connecter pour publier un commentaire.
Votre chaîne d'URL est
Le nom du paramètre dans l'au-dessus de la Chaîne est "rpi".
Le code ci-dessous va vous donner la valeur du paramètre "rpi".