Comment utiliser les Servlets et Ajax?
Je suis très nouveau pour les applications web et les Servlets et ma question est la suivante:
Chaque fois que j'imprime quelque chose à l'intérieur de la servlet et de l'appeler par le webbrowser, il retourne une nouvelle page contenant que du texte. Est-il possible d'imprimer le texte de la page en cours à l'aide d'Ajax?
Vous devez vous connecter pour publier un commentaire.
En effet, le mot clé est "ajax": Asynchronous JavaScript and XML. Cependant, les dernières années, c'est plus que souvent Asynchronous JavaScript et JSON. Fondamentalement, vous laissez JS exécuter une requête HTTP asynchrone et mise à jour le DOM HTML arbre basé sur les données de réponse.
Car il est à peu un fastidieux de travail à faire pour travailler dans tous les navigateurs (en particulier Internet Explorer par rapport à d'autres), il y a beaucoup de bibliothèques JavaScript qui simplifie le travail dans les fonctions individuelles et couvre autant que possible un navigateur spécifique bugs/défauts sous le capot, comme jQuery, Prototype, Mootools. Depuis jQuery est plus populaire ces jours-ci, je vais l'utiliser dans les exemples ci-dessous.
Kickoff exemple de retour
String
en tant que texte brutCréer un
/some.jsp
comme ci-dessous (remarque: le code ne prévoit pas que le fichier JSP être placé dans un sous-dossier, si vous le faites, alter URL du servlet en conséquence):Créer un servlet avec un
doGet()
méthode qui ressemble à ceci:Carte cette servlet sur un modèle d'URL de
/someservlet
ou/someservlet/*
comme ci-dessous (à l'évidence, le modèle d'URL est libre de votre choix, mais vous auriez besoin de modifier lessomeservlet
URL dans le code JS exemples sur toutes lieu en conséquence):Ou lorsque vous n'êtes pas sur un Servlet 3.0 compatible contenant encore (Tomcat 7, Glassfish 3, JBoss as, 6, etc ou plus récent), puis la carte dans
web.xml
à l'ancienne (voir aussi nos Servlets page wiki):Maintenant, ouvrez le http://localhost:8080/context/test.jsp dans le navigateur et appuyez sur le bouton. Vous verrez que le contenu de la div mis à jour avec la réponse de servlet.
Retour
List<String>
JSONAvec JSON au lieu de clair que la forme de la réponse, vous pouvez même obtenir quelques étapes supplémentaires. Cela donne plus de dynamique. Tout d'abord, vous souhaitez disposer d'un outil pour convertir entre des objets Java et les chaînes JSON. Il ya beaucoup d'entre eux (voir le bas de cette page pour un aperçu). Mon préféré est Google Gson. Télécharger et mettre son fichier JAR dans
/WEB-INF/lib
dossier de votre webapplication.Voici un exemple qui affiche
List<String>
comme<ul><li>
. La servlet:Le code JS:
Ne remarque que jQuery analyse automatiquement la réponse en JSON et vous donne directement un objet JSON (
responseJson
) comme argument de fonction lorsque vous définissez le contenu de la réponse àapplication/json
. Si vous oubliez de le définir ou de s'appuyer sur un défaut detext/plain
outext/html
, puis leresponseJson
argument ne serait pas vous donner un objet JSON, mais un simple vanille chaîne et que vous devez manuellement bricoler avecJSON.parse()
après, ce qui est donc totalement inutile si vous avez défini le type de contenu à droite à la première place.Retour
Map<String, String>
JSONVoici un autre exemple qui affiche
Map<String, String>
comme<option>
:Et les JSP:
avec
Retour
List<Entity>
JSONVoici un exemple qui affiche
List<Product>
dans un<table>
où laProduct
classe a les propriétésLong id
,String name
etBigDecimal price
. La servlet:Le code JS:
Retour
List<Entity>
XMLVoici un exemple qui n'est effectivement la même chose que l'exemple précédent, mais avec XML au lieu de JSON. Lors de l'utilisation de JSP que XML de sortie du générateur, vous verrez que c'est moins fastidieux code de la table et tous. JSTL est de cette façon beaucoup plus utiles que vous pouvez réellement utiliser pour effectuer une itération sur les résultats et d'effectuer de côté de serveur de mise en forme des données. La servlet:
Le code JSP (remarque: si vous placez le
<table>
dans un<jsp:include>
, il peut être réutilisable ailleurs dans une non-réponse ajax):Le code JS:
Vous aurez alors probablement comprendre pourquoi XML est tellement plus puissant que JSON pour l'usage particulier de la mise à jour d'un document HTML à l'aide d'Ajax. JSON est drôle, mais après tout, en général, seulement utile pour soi-disant "services web publics". MVC, frameworks comme JSF utilisation de XML sous les couvertures pour leurs ajax magie.
Ajaxifying un formulaire existant
Vous pouvez utiliser jQuery
$.serialize()
facilement ajaxify après les formes sans bidouiller avec la collecte et le dépassement de la forme individuelle des paramètres d'entrée. Dans l'hypothèse d'un formulaire existant qui fonctionne parfaitement bien sans JavaScript/jQuery (et donc dégrade gracieusement lorsque l'utilisateur a désactivé JavaScript):Vous pouvez renforcer progressivement avec l'ajax comme ci-dessous:
Vous le pouvez dans le servlet de distinction entre les demandes normales et les requêtes ajax comme ci-dessous:
La jQuery Forme de plugin fait moins ou plus de la même chose que ci-dessus jQuery exemple, mais il a plus de support transparente pour
multipart/form-data
les formes requises par les uploads de fichier.Envoyant manuellement les paramètres de la demande de servlet
Si vous n'avez pas de forme du tout, mais je voulais juste interagir avec la servlet "arrière-plan" dans lequel vous souhaitez POSTER quelques données, vous pouvez utiliser jQuery
$.param()
de convertir facilement un objet JSON à une URL-encodé de la chaîne de requête.La même
doPost()
méthode comme indiqué ci-dessus peut être réutilisé. Notez que la syntaxe ci-dessus fonctionne également avec$.get()
en jQuery etdoGet()
dans le servlet.Manuellement l'envoi d'objet JSON à servlet
Si vous prévoyez d'envoyer l'objet JSON comme un tout plutôt que comme personne les paramètres de la demande pour une raison quelconque, alors vous auriez besoin de sérialiser une chaîne à l'aide
JSON.stringify()
(ne faisant pas partie de jQuery) et de charger jQuery pour définir demande type de contenu àapplication/json
au lieu de (par défaut)application/x-www-form-urlencoded
. Cela ne peut être fait via$.post()
fonction de commodité, mais qui doit être fait via$.ajax()
comme ci-dessous.Ne remarque que beaucoup de débutants mélange
contentType
avecdataType
. LecontentType
représente le type de l' demande corps. LedataType
représente l' (prévu) type de réponse corps, qui est généralement inutile comme jQuery déjà détecte automatiquement sur la base de la réponse duContent-Type
en-tête.Ensuite, pour le traitement de l'objet JSON dans la servlet, qui n'est pas envoyé comme personne les paramètres de la demande, mais comme un ensemble de la chaîne JSON de la façon décrite ci-dessus, vous ne devez manuellement analyser le corps de la requête à l'aide d'un JSON outil au lieu d'utiliser
getParameter()
la manière habituelle. À savoir, les servlets ne prennent pas en chargeapplication/json
formaté demandes, mais seulementapplication/x-www-form-urlencoded
oumultipart/form-data
des requêtes au format. Gson prend également en charge l'analyse d'une chaîne JSON dans un objet JSON.Ne remarque que tout cela est plus maladroit que de simplement en utilisant
$.param()
. Normalement, vous souhaitez utiliserJSON.stringify()
seulement si le service est par exemple un JAX-RS (RESTful) service de qui est, pour quelques raisons, seule capable de consommer de chaînes JSON et non l'ensemble des paramètres de la requête.L'envoi d'une redirection à partir de servlet
Important de réaliser et de comprendre, c'est que tout
sendRedirect()
etforward()
appel de la servlet sur une requête ajax serait seulement de l'avant ou de les rediriger la requête ajax lui-même et non pas le document principal/de la fenêtre où la requête ajax à l'origine. JavaScript/jQuery serait dans ce cas de récupérer uniquement la redirigés/a transmis la réponse queresponseText
variable dans la fonction de callback. Si elle représente un ensemble de page HTML et non pas un spécifique ajax XML ou JSON réponse, alors tout ce que vous pourriez faire est de remplacer le document en cours avec elle.Noter que cela ne modifie pas l'URL que l'utilisateur final voit dans la barre d'adresse du navigateur. Donc, il y a des problèmes avec bookmarkability. Par conséquent, il est beaucoup mieux de simplement retourner une "instruction" de JavaScript/jQuery pour effectuer une redirection au lieu de renvoyer l'ensemble du contenu de la redirection de la page. E. g. en retournant un booléen, ou d'une URL.
Voir aussi:
$("#somediv").html($(responseXml).find("data").html())
cette ligne. Il dit aussi "Mauvais nombre d'arguments ou affectation de propriété non valide". Je vois aussi que mon XML est rempli avec des données quand je le déboguer. Des idées ?<div id="somediv">
?La bonne façon de mettre à jour la page affichée dans le navigateur de l'utilisateur (sans rechargement) est d'avoir un code s'exécutant dans le navigateur de mise à jour de la page du DOM.
Que le code est généralement le javascript qui est incorporé ou lié à partir de la page HTML, d'où l'AJAX suggestion. (En fait, si nous supposons que la mise à jour du texte provient du serveur via une requête HTTP, c'est classique AJAX.)
Il est également possible de mettre en œuvre ce genre de chose à l'aide de certains navigateur plug-in ou add-on, mais il peut être difficile pour un plugin pour atteindre dans le navigateur de structures de données pour mettre à jour le DOM. (En code natif plugins écrire normalement pour certains graphiques du cadre, qui est intégré dans la page.)
Je vais vous montrer un ensemble de l'exemple de servlet & comment faire appel ajax.
Ici, nous allons créer l'exemple simple de créer le formulaire de connexion à l'aide de servlet.
index.html
Voici ajax Échantillon
LoginServlet Servlet Code :-
Ajax (également AJAX) un acronyme pour Asynchronous JavaScript and XML) est un groupe cohérent de développement web, les techniques utilisées sur le côté client pour créer asynchrone applications web. Avec l'Ajax, les applications web peuvent envoyer des données et de récupération des données à partir d'un serveur de façon asynchrone
Ci-dessous est un exemple de code:
Page Jsp java script la fonction de soumettre des données à la servlet avec deux variable firstName et lastName:
Servlet pour lire les données à envoyer à jsp au format xml ( Vous pouvez utiliser du texte ainsi. Vous devez simplement modifier le contenu de la réponse de texte et de rendre les données sur la fonction javascript.)
Normalement, vous ne pouvez pas mettre à jour une page à partir d'une servlet. Le Client (navigateur) doit demander une mise à jour. Eiter des charges des clients une toute nouvelle page ou il demande une mise à jour d'une partie d'une page existante. Cette technique est appelée Ajax.
En utilisant bootstrap multi sélectionnez
Ajax
Dans Le Servlet