2013-04-30 3 views
5

एक jsp मैं एक छोटे से हेडर रख अंदर की सीमा:विधि के कोड ... पार कर रहा है 65535 बाइट्स

<%@ page import="java.util.*"%> 

<% HttpSession CurrentSession = 
request.getSession(); 
... 
%> 

... और एक बड़ा एचटीएमएल

<html> 
... 
</html> 

अगर मैं करने की कोशिश इसे पढ़ें क्योंकि मुझे त्रुटि है ... "65535 बाइट सीमा से अधिक है" मुझे इसे तोड़ना है। चूंकि मैं जावा के लिए नया हूं, मैं इसे समझ नहीं सकता कि यह कैसे करना है। क्या आप कृपया मुझे इंगित करें मार्ग?

+0

क्या आपके पास अपने जेएसपी में कोई स्थिर शामिल है? – NINCOMPOOP

+0

यह भाषा/रनटाइम डिजाइनरों के लिए एक महत्वपूर्ण बिंदु दिखाता है; मान लें कि आपकी भाषा में प्रोग्राम * कंप्यूटर जेनरेट हो सकते हैं * (शायद यदि आपकी भाषा संकलन के लिए लक्ष्य के रूप में उपयोग की जाती है)। हाथों से लिखे गए कार्यक्रमों से कभी भी हिट नहीं की जाने वाली सीमाएं कंप्यूटर से उत्पन्न कार्यक्रमों के लिए आसानी से समस्याएं पैदा कर सकती हैं। –

+0

@Alex लेकिन कंप्यूटर स्क्रिप्ट को स्वचालित रूप से विधि को विभाजित करने के लिए प्रोग्राम किया जा सकता है। – Antimony

उत्तर

2

जेएसपी को सामान्य सर्वलेट जावा स्रोत में परिवर्तित कर दिया गया है, और कुछ जेनरेट की गई विधि बहुत बड़ी है, क्योंकि विधि लंबाई पर 64 केबी सीमा (बाइट कोड पर) है।

यदि संभव हो तो गतिशील के साथ स्थिर परिवर्तन (वास्तव में एक अन्य जेएसपी स्रोत एम्बेड करना) शामिल है।

समाधान (और शायद अच्छी शैली) भी कुछ विधियों को पेश करता है जिसमें सामान्य कोड के टुकड़े स्थानांतरित होते हैं।

<%@ 

    void tableRow(String... cellValues) { 
     %><tr><% 
      for (String cellValue : cellValues) { 
       %> <td><%= cellValue %></td> 
    <% 
      } 
     %></tr> 
    <% 
    } 
%> 

...

<% 
    tableRow("one", "unu", "un"); 
    tableRow("two", "du", "deux"); 
    tableRow("three", "tri", "trois"); 
%> 

पी.एस.: उदाहरण के <tr> के साथ एक HTML तालिका पंक्ति उत्पन्न करने के लिए के लिए उपरोक्त विधि बहुत अधिक बचाने के लिए बहुत बड़ा पैमाने है, एक बड़ा टुकड़ा लेना और जैसे createResultsTable एक विधि बनाना अधिक प्रभावी है।

0

<jsp:include page="foo.html" %> मानक कार्रवाई का उपयोग रनटाइम पर सामग्री को शामिल करने के लिए किया जा सकता है - see some random documentation

2

जेएसपी को सर्वलेट कोड में संकलित किया जाता है, जिसे वास्तविक जावा क्लास फाइलों में संकलित किया जाता है। जेएसपी कोड को एक बड़ी डूगेट() विधि में रखा जाएगा, और यदि आपकी जेएसपी फ़ाइल वास्तव में बड़ी है, तो यह 65535 की विधि आकार सीमा को हिट करेगी। सीमा JVM specification से आ रही है ("कोड_लेथेंस आइटम का मान कम होना चाहिए 65536 ")।

आपको फ़ाइल को कई फ़ाइलों में विभाजित करना चाहिए। मैं इसे इस थ्रेड में प्रस्तावित विभिन्न विधियों में विभाजित नहीं करूंगा, क्योंकि यह इस मामले में कोड तर्क को और भी जटिल बना सकता है, लेकिन एक jsp: HTML भाग (0) जैसे proposed by McDowell के लिए शामिल करें।

संबंधित मुद्दे