2013-04-30 3 views
5

을 제한 그것을 읽으십시오. "... 65535 바이트 제한을 초과합니다."라는 오류가 발생합니다. 나는 그것을 해체해야합니다. 자바를 처음 접했기 때문에 그것을하는 법을 이해할 수 없습니다. 제발 나를 알려주십시오. 방법?방법의 코드 ... 초과하는 65,535 바이트 난 작은 헤더를 가지고 JSP 내부

+0

JSP에 정적 포함이 있습니까? – NINCOMPOOP

+0

이것은 언어/런타임 디자이너에게 중요한 점을 보여줍니다. 귀하의 언어로 된 프로그램이 * 컴퓨터 생성 * 일 수 있다고 생각하십시오 (아마도 귀하의 언어가 편집 대상으로 사용되는 경우). 수작업으로 작성된 프로그램에 결코 부딪치지 않는 제한 사항으로 인해 컴퓨터 생성 프로그램에 문제가 발생할 수 있습니다. –

+0

@Alex하지만 컴퓨터 스크립트는 자동으로 메소드를 분할하도록 프로그래밍 할 수 있습니다. – Antimony

답변

2

JSP는 일반적인 Servlet Java 소스로 변환되며 메소드 길이에 64KB 제한 (바이트 코드에서)이 있으므로 생성 된 일부 메소드가 너무 큽니다.

가능하면 정적 포함 변경 (실제로 다른 JSP 소스 포함)이 포함됩니다.

해결책 (및 아마도 좋은 스타일)은 일반적인 코드 조각을 옮기는 두 가지 방법을 소개합니다.

<%@ 

    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이 더 효과적입니다.

2

JSP는 서블릿 코드로 컴파일되고 실제 java .class 파일로 컴파일됩니다. JSP 코드는 하나의 커다란 doGet() 메소드에 포함될 것이고, JSP 파일이 실제로 크기가 클 경우 메소드 크기 제한 인 65535에 도달 할 것입니다. 제한은 JVM specification에서옵니다 ("code_length 항목의 값은 65536 ").

파일을 여러 파일로 분할해야합니다. 코드 로직을이 경우 훨씬 더 복잡하게 만들 수 있기 때문에이 스레드에서 제안 된 다른 메소드로 분할하지는 않겠지 만 proposed by McDowell과 같은 HTML 부분에는 jsp : include를 수행해야합니다.