2013-04-30 21 views
5

Bên trong một jsp Tôi có một tiêu đề nhỏ:Mã của phương pháp ... được vượt quá 65535 byte hạn chế

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

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

... và một html lớn

<html> 
... 
</html> 

Nếu tôi cố gắng đọc nó như là tôi nhận được một lỗi "... vượt quá giới hạn 65535 byte". Tôi phải phá vỡ nó lên. Vì tôi mới vào java tôi không thể tìm ra cách để làm điều đó. Bạn có thể vui lòng cho tôi biết đường?

+0

Bạn có bất kỳ bao gồm tĩnh nào trong JSP của mình không? – NINCOMPOOP

+0

Điều này minh họa một điểm quan trọng cho các nhà thiết kế ngôn ngữ/thời gian chạy; xem xét rằng các chương trình bằng ngôn ngữ của bạn có thể * máy tính được tạo * (có thể nếu ngôn ngữ của bạn được sử dụng làm mục tiêu để biên dịch). Các giới hạn sẽ không bao giờ bị các chương trình viết tay có thể dễ dàng gây ra các vấn đề cho các chương trình do máy tính tạo ra. –

+0

@Alex nhưng kịch bản máy tính cũng có thể được lập trình để tự động chia phương thức. – Antimony

Trả lời

2

JSP được chuyển thành nguồn java Servlet bình thường và một số phương thức được tạo quá lớn, vì có giới hạn 64 KB (trên mã byte) trên độ dài phương thức.

Nếu có thể thay đổi tĩnh bao gồm (thực sự nhúng một nguồn JSP khác) với động bao gồm.

Giải pháp (và có lẽ là kiểu tốt) cũng giới thiệu một vài phương pháp mà các phần của mã chung được di chuyển. Ví dụ để tạo ra một dòng của bảng HTML với <tr>:

<%@ 

    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"); 
%> 

T.B. Phương pháp trên là quy mô quá nhỏ để tiết kiệm được nhiều, lấy một mảnh lớn và tạo phương thức như createResultsTable có hiệu quả hơn.

2

JSP được biên dịch thành mã servlet, sau đó được biên dịch thành các tệp .class thực tế của java. Mã JSP sẽ được đưa vào một phương thức doGet() lớn và nếu tệp JSP của bạn thực sự lớn, nó sẽ đạt giới hạn kích thước phương thức 65535. Giới hạn đến từ JVM specification ("Giá trị của mục code_length phải nhỏ hơn 65536 ").

Bạn nên chia tệp thành nhiều tệp. Tôi sẽ không chia nó thành các phương pháp khác nhau như đề xuất trong chủ đề này, vì nó có thể làm cho mã logic phức tạp hơn trong trường hợp này, nhưng thực hiện jsp: include cho (các) phần HTML như proposed by McDowell.

Các vấn đề liên quan