2016-03-15 1 views
2

Y a-t-il un moyen, à l'intérieur d'une page jsp:include, obtenir sa page demandant de répondre avec une erreur HTTP 500? J'ai essayé d'utiliser le response.sendError(418, "I'm a teapot.");, mais cela ne fonctionne que dans le JSP qui contient le jsp:include, et seulement s'il s'agit de la première ligne car vous ne pouvez pas l'appeler après que la réponse a été validée. Ce que j'est le suivant:Retour avec une erreur 500 de l'intérieur d'un JSP include

index.jsp:

// other HTML 

<jsp:include page="Exapmle.jsp"> 
    <jsp:param name="aVariable" value="aValue" /> 
</jsp:include> 

// other HTML 

Example.jsp:

<% 
    String aVariable = request.getParameter("aVariable"); 
    if (aVariable != null && !aVariable.trim().isEmpty) { 
     // code to generate content 
     %><%=someContent%><% 
    } else { 
     response.sendError(418, "I'm a teapot"); 
    } 
%> 

est-il donc une façon de le faire? Je suis douteux basé sur le travail de JSP, mais j'espère que quelque part ici peut aider. En outre, les servlets ne sont pas une option (maintenant, au moins).

Répondre

1

Si vous le faites fonctionner, vous ne devriez pas compter dessus pour toujours travailler sur toutes les plates-formes et futures mises à jour. Comme vous le dites correctement: Une fois la réponse validée (par exemple, tous les en-têtes HTTP sont en cours de transfert vers le client), le serveur n'a plus aucun moyen d'ajouter d'autres en-têtes HTTP. Laissez seul changer le code d'état. C'est la raison pour laquelle les JSP sont considérées comme la couche VIEW d'une application, et non comme la CONTROLLER. Les moments où toute la logique de l'application a été écrite dans les JSP sont terminés et vous devriez avoir une bonne gestion des requêtes quelque part (si seulement dans une servlet, mais plutôt dans une abstraction/framework plus puissante) - décider du résultat et soit rediriger vers une erreur message ou la visualisation appropriée dans ce code.

JSP permet de rendre le contenu que vous envoyez avec le code d'état approprié. Ne pas décider quel code d'état envoyer.

+0

Oh, je sais. Je n'aime pas avoir besoin de faire ça, mais c'est malheureusement ma tâche en ce moment. Nous sommes dans le processus de passage à .NET MVC à partir de servlets Java, donc ceci est supposé être une solution rapide pour faire fonctionner quelque chose avant de faire le changement entièrement. Les raisons sont longues et ennuyeuses, mais comme c'est mon manager veut que cela soit fait de cette façon. – Daevin

+0

Ensuite, vous devriez toujours déplacer la détection de la condition d'erreur vers le haut. Si vous ne pouvez pas le promouvoir à l'endroit approprié, déplacez-le vers le jsp inclus. C'est moche et faux, mais semble être le chemin à parcourir pour vous. –