@anderson.bonavides escreveu:
Pessoal tenho uma aplicação JSF que possui um servlet que só é chamado caso eu faça o login, ou seja, caso haja uma sessão iniciada. Preciso que este servlet seja chamado independente da sessão ser iniciada.
Declaração no web.xml
<servlet> <servlet-name>imagemServlet</servlet-name> <servlet-class>br.com.desenv.intranet.util.ImagemServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>imagemServlet</servlet-name> <url-pattern>/imagem/*</url-pattern> </servlet-mapping>
Chamada ao Servlet:
<h:graphicImage value="/imagem?id=#{u.imagem.id}" />
E meu Servlet:
public class ImagemServlet extends HttpServlet{ private static final long serialVersionUID = 1L; private static final int DEFAULT_BUFFER_SIZE = 10240; // 10KB. @Autowired private ImagemService imagemService; @Override public void init(ServletConfig conf) throws ServletException { super.init(conf); SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { BufferedInputStream in = null; BufferedOutputStream output = null; try { String imageId = request.getParameter("id"); if (!StringUtil.ehBrancoOuNulo(imageId)) { Imagem imagemTemp = new Imagem(); imagemTemp.setId(Long.valueOf(imageId)); Imagem imagem = imagemService.consultar(imagemTemp); if(imagem != null){ byte[] contentFile = imagem.getDados(); String contentType = getServletContext().getMimeType(imagem.getNome()); if (contentType == null) { response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404. return; } response.reset(); response.setBufferSize(DEFAULT_BUFFER_SIZE); response.setContentType(contentType); response.setHeader("Content-Length", String.valueOf(contentFile.length)); response.setHeader("Content-Disposition", "inline; filename=\"" + imagem.getNome() + "\""); response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0); in = new BufferedInputStream(new ByteArrayInputStream(contentFile), DEFAULT_BUFFER_SIZE); output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE); lerArquivo(in, output); } else { response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404. return; } } } catch (Exception ex) { ex.printStackTrace(); } finally { close(output); close(in); } } private void lerArquivo(BufferedInputStream in, BufferedOutputStream output) throws IOException { byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; int length; while ((length = in.read(buffer)) > 0) { output.write(buffer, 0, length); } } private void close(Closeable resource) { if (resource != null) { try { resource.close(); } catch (IOException e) { e.printStackTrace(); } } }
Mensagens: 1
Participantes: 1