Set a Seamsession in a CustomServlet
spersch Mar 22, 2009 5:12 PMHi Together,
i wrote a CustomServlet to handle uploads from a flashcomponent. Now i am using Componetnt.getInstance(...) to get my seam component which should manage this all. But with every call i get a new instance. I'm was looking for a solution the last 2 days and i despair. Before i forget it, i send my jsessionid to the servlet as a get parameter.
Hope you can help me, here is my servletcode:
package com.rollertreffen.service;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.servlet.*;
import org.jboss.seam.*;
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(final HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
getUploads(req);
res.setContentType("application/json");
PrintWriter out = res.getWriter();
out.println("{empty}");
out.close();
}
protected void getUploads(HttpServletRequest req) {
final String sessionId = req.getParameter("jsessionid");
System.out.println("Session ID: " + sessionId);
final ServletFileUpload upload = new ServletFileUpload();
try {
PictureManager pms = (PictureManager) Component.getInstance("pms", ScopeType.SESSION);
for (FileItemIterator it = upload.getItemIterator(req); it.hasNext();) {
final FileItemStream item = it.next();
System.out.println("Fieldname: " + item.getFieldName());
final byte[] uplBytes = getByteArray(item.openStream());
System.out.println("UPLOAD: " + uplBytes.length);
if ("form-demo:picture1".equals(item.getFieldName())) {
pms.addFile(uplBytes);
}
}
pms.upload();
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected byte[] getByteArray(InputStream is) throws IOException {
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
final byte[] buffer = new byte[32768];
for (int read; -1 != (read = is.read(buffer));) {
bos.write(buffer, 0, read);
}
is.close();
bos.close();
return bos.toByteArray();
}
}Best regards, Steffen