Comment apporter un document binaire basé sur le document HTML Avec des filtres dans Java
Cela peut être un peu déroutant, mais j'ai des problèmes. Mon objectif est de prendre le document d'entrée HTML, puis traiter ce document et utiliser des données HTML Pour afficher le document d'image. Par exemple, l'utilisateur demandera URL Avec une action = png dans la rangée de requête, puis le filtre sera appelé pour URL et document d'image de sortie.
J'ai tout essayé, mais dans mon environnement /Websphere/Je peux afficher un seul type. Si le type d'entrée text/html, Je ne peux que retirer le document texte, mais je ne peux pas retirer un document binaire. Pourquoi? Parce que chaque fois que je reçois une exception d'état illégale.
[1/29/09 17:59:57:576 EST] 00000020 SystemErr R java.lang.IllegalStateException: SRVE0209E: L'écrivain est déjà reçu
[1/29/09 17:59:57:576 EST] 00000020 SystemErr R dans com.ibm.ws.webcontainer.srt.SRTServletResponse.getOutputStream/SRTServletResponse.java:505/
J'utilise pseudocode pour ne pas révéler tout votre code:
Code de la classe de wrapper essentiellement:
Et le code de filtrage est:
Le code fonctionne si je veux prendre une sorte de document de texte d'entrée html. Je suppose qu'en raison du flux ouvert printwriter. Mais j'ai eu des problèmes avec la transition vers un autre format. Fondamentalement parce que je ne peux pas appeler response.getOutputStream//
J'ai tout essayé, mais dans mon environnement /Websphere/Je peux afficher un seul type. Si le type d'entrée text/html, Je ne peux que retirer le document texte, mais je ne peux pas retirer un document binaire. Pourquoi? Parce que chaque fois que je reçois une exception d'état illégale.
[1/29/09 17:59:57:576 EST] 00000020 SystemErr R java.lang.IllegalStateException: SRVE0209E: L'écrivain est déjà reçu
[1/29/09 17:59:57:576 EST] 00000020 SystemErr R dans com.ibm.ws.webcontainer.srt.SRTServletResponse.getOutputStream/SRTServletResponse.java:505/
J'utilise pseudocode pour ne pas révéler tout votre code:
<filter>
<filter-name>TestFilter</filter-name>
<filter-class>
com.util.TestFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/index_test2.html</url-pattern>
</filter-mapping>
Code de la classe de wrapper essentiellement:
public class ContentCaptureServletResponse extends HttpServletResponseWrapper {
private ByteArrayOutputStream contentBuffer;
private PrintWriter writer;
public PrintWriter getWriter// throws IOException {
if /writer == null/ {
contentBuffer = new ByteArrayOutputStream//;
writer = new PrintWriter/contentBuffer/;
}
return writer;
}
public String getContent//{
try {
writer = getWriter//;
} catch /IOException e/ {
e.printStackTrace//;
}
writer.flush//;
String xhtmlContent = new String/contentBuffer.toByteArray///;
System.out.println/xhtmlContent/;
return xhtmlContent;
}
}
Et le code de filtrage est:
public void doFilter/ServletRequest req, ServletResponse resp, FilterChain filterChain/ throws IOException, ServletException {
HttpServletRequest request = /HttpServletRequest/ req;
HttpServletResponse response = /HttpServletResponse/ resp;
final String renderType = request.getParameter/"R"/;
final String renderClassName = request.getParameter/"C"/;
if //renderType != null/ && /renderClassName != null// {
try {
this.setFilterChain/filterChain/;
response.setContentType/"image/png"/;
PrintWriter out = response.getWriter//;
// I call getWriter but not BOTH!
//response.getOutputStream//;
response.getWriter//;
// Build up the HTML document into a string.
CaptureResponse capContent = new CaptureResponse/response/;
this.mainFilterChain.doFilter/req, /;
String myString = capHtmlContent.getContent//;
// What I really want to do here is output an output stream
// so I can write a binary image
processStr/myString/;
response.getOutputStream//;
response.write/binaryimage/
} catch /Exception e/ {
e.printStackTrace//;
}
// No data will be output to the user.
} else {
filterChain.doFilter/request, response/;
} // End of if-else
} // End of the method.
Le code fonctionne si je veux prendre une sorte de document de texte d'entrée html. Je suppose qu'en raison du flux ouvert printwriter. Mais j'ai eu des problèmes avec la transition vers un autre format. Fondamentalement parce que je ne peux pas appeler response.getOutputStream//
Aucun résultat connexe trouvé
Invité:
Pour répondre aux questions, connectez-vous ou registre
2 réponses
Edmond
Confirmation de:
Il semble que vous devriez être capable de le faire:
Vous pouvez certainement être sûr d'ouvrir comme écrivain et OutputStream
Catherine
Confirmation de:
Vous devrez peut-être vous familiariser avec votre documentation et vos exemples. Par exemple, je ne comprends pas pourquoi vous appelez response.get*//, En fait, sans regarder le résultat. Êtes-vous sûr que cela est nécessaire ou est-ce parce que vous avez coupé votre code?
Pour votre santé,
FOLLER.