मैंने सर्वलेट लागू किया है जो स्थिर नहीं है, कभी-कभी यह सामग्री में हेडर मिश्रित करता है और दो बार लिखता है।सर्वलेट हेडर और सामग्री को मिश्रित करता है और आउटपुट में दो बार लिखता है?
और कभी कभी यह फ़ाइल जो प्रतिक्रिया हेडर कुछ इस तरह की सामग्री द्वारा मिश्रित शामिल लौटा रहा है:
Server: Apache-Coyote/1.1
: W/"43-1353687036000"
DatCCoonntenntt--DDiissppoosittiioonn: : atatatacehnmte;n tf;i lfenlaemnea=m20=12201112211127325421_4W1_Wirnkgi_nSgc_Seern.xnlsx
sx
Content-Typ-eT: ype: applaipcatciaoti/on/toctestt-rstare
am
ConCtoententy-pTeype: appalicatcion/oon/octet-setarm
m
CCoonntent-Lnegtht h: 4199
Date: te: FriF,r i2,3 2No vNo2v0 120162: 215:25 :G4M2T
....
File content bytes ...
And again same header and content
अद्यतन * यह स्थिति Tomcat7 पर होता है *
मैं पर भी परीक्षण किया है टॉमकैट 6 और जेट्टी, दोनों मामलों में सामग्री की प्रतिक्रिया के लिए HTTP-शीर्षलेख का कोई इंजेक्शन नहीं है लेकिन HTTP-हैडर गलत है और गलत फ़ाइल नाम देता है, फ़ाइल सामग्री सही फ़ाइल है। मैंने देखा है कि सर्वलेट से गलत रिटर्न तब होता है जब रिटर्न ट्रांसफर-एन्कोडिंग टूट जाती है।
जब मैं हेडर सामान हटा रहा हूं, और बाइट्स का दूसरा भाग, यह वैध फ़ाइल है। क्या यह संभव है कि सिंक्रनाइज़ेशन समस्या है?
अद्यतन यहाँ सर्वलेट का पूरा स्रोत है:
public class ExcelDownloadServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
private static final Logger LOG = Logger
.getLogger (ExcelDownloadServlet.class);
@Override
protected void doGet (HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
try
{
TransactionId transactionId = getTransactionId (request);
String fileName =
request.getParameter (GlobalConstants.EXCEL_FILE);
ExcelDownloadType downloadType =
ExcelDownloadType
.valueOf (request
.getParameter (GlobalConstants.EXCEL_DOWNLOAD_TYPE));
ActionContextFactory actionContextFactory =
ApplicationContext.getContext()
.getActionContextFactory();
//suppress warning. HttpServletRequest.getLocales does not support generics
@SuppressWarnings("unchecked")
ActionContext actionContext =
actionContextFactory.create (request.getSession()
.getId(), Collections.<Locale> list (request
.getLocales()));
GetExcelDataResponse dataResponse =
new GetExcelData (transactionId, fileName, downloadType)
.execute (actionContext);
writeToResponse (response, dataResponse.getFileName(),
dataResponse.getData());
}
catch (InvalidSessionException e)
{
LOG.error ("Invalid session in Excel download", e);
throw new ServletException (e);
}
catch (ActionException e)
{
LOG.error ("Could not download into excel.", e);
throw new ServletException (e);
}
}
protected TransactionId getTransactionId (HttpServletRequest request)
{
return RequestParameterDeserializer.<TransactionId> deserialize (
request, GlobalConstants.TRANSACTION_ID);
}
protected void writeToResponse (HttpServletResponse response,
String rawFileName, byte[] data) throws IOException
{
ServletOutputStream sout = null;
try
{
response.setContentType ("application/octet-stream");
response.setContentLength (data.length);
// removing blanks from the file name, since FF cuts file names
// otherwise.
String fileNameWithTime = rawFileName.replaceAll (" ", "_");
response.setHeader ("Content-Disposition", "attachment; filename="
+ fileNameWithTime);
sout = response.getOutputStream();
sout.write (data, 0, data.length);
}
finally
{
if (sout != null)
{
sout.close();
}
}
}
अद्यतन * कॉल जब, आवश्यक पैरामीटर और iframe में सेट के साथ सर्वलेट का URL पैदा कर रहा है तो GWT एप्लिकेशन से आती है सर्वलेट कॉल और फ़ाइल डाउनलोड हो रही है। क्या कोई सुझाव है? *
को हटाने आप एक तुल्यकालन मुद्दा मैं अपने पूरे सर्वलेट पोस्टिंग की सिफारिश करेंगे संदेह है की कोशिश है, क्योंकि कुछ तुल्यकालन मुद्दों सर्वलेट में परिभाषित क्षेत्रों के कारण होता है। –
@ kmb385 मेरा मतलब है कि मैं कोड के भाग को सिंक्रनाइज़ करना चाहिए जिसे मैंने पोस्ट किया था? यह बहुत ही सरल सर्वलेट है जो आउटपुट में जेनरेट की गई फ़ाइल के बाइट सरणी को लिखता है, और मैं उलझन में हूं कि इसमें प्रतिक्रिया हेडर इत्यादि क्यों हैं। –
प्रत्येक सर्वलेट के लिए प्रतिक्रिया और अनुरोध के नए उदाहरण के बाद, मुझे आवश्यकता नहीं दिखाई देती है कोड के इस ब्लॉक को सिंक्रनाइज़ करें। क्या आप HTML या जेएस पोस्ट कर सकते हैं जो सर्वलेट का अनुरोध करता है। –