2009-08-20 26 views
31

Đây là stacktrace:Lấy số dòng jsp thực tế từ một số dòng theo dõi ngăn xếp?

... 
org.apache.jsp.showcustomer_jsp._jspService(showcustomer_jsp.java:128) 
org.apache.jasper.runtime.HttpJspBase.service(Unknown Source) 

Đây là những gì tôi làm:

  1. Lấy số dòng từ stacktrace, trong trường hợp này 128.
  2. Tìm file showcustomer_jsp.java (và nó isn 't chính xác rõ ràng để xem trong /var/run/tomcat-6/Catalina/localhost/_/org/apache/jsp).
  3. Mở và chuyển đến dòng 128.
  4. Bây giờ, hãy tìm kiếm tệp .jsp cho bất kỳ nội dung nào bạn tìm thấy trên dòng 128 trong tệp _jsp.java.
  5. Bùng nổ! Bạn đã hoàn tất!

Xin vui lòng, có cách nào đơn giản hơn để thực hiện việc này không?

+0

Thậm chí không biết bạn có thể làm điều đó. +1 – iandisme

Trả lời

2

Tôi không nghĩ bạn có thể. Tệp JSP được biên dịch thành một servlet và không được chạy trực tiếp. Khi ngoại lệ được ném ra từ servlet này, dòng bạn có trong stack trace là một từ class. Dòng ban đầu trong JSP bị mất vào thời điểm này.

Thông thường nó là tốt nhất để tránh phải viết mã hoặc ném ngoại lệ từ một jsp, và đóng gói logic của bạn trong servlets và các thẻ JSP, và sử dụng JSTL cho dòng điều khiển (nếu, foreach, vv)

+2

WebLogic có một tính năng thực sự tốt đẹp trong các phiên bản trước WL10: nó sẽ viết một bình luận vào tệp Java được tạo ra hiển thị số dòng JSP nguồn. Ngay cả khi logic của bạn được đóng gói trong một taglib, nó là tốt đẹp để xem mà invocation ném. – kdgregory

+0

Và một cái nhìn nhanh về các nguồn Jasper dường như chỉ ra rằng nó xử lý các tệp JSP như một luồng mã thông báo, mà không có kiến ​​thức về số dòng. Vì vậy, câu trả lời là không. – kdgregory

+0

IDE có tất cả dữ liệu để tính toán số dòng gốc. Có lẽ ai đó có thể viết một plugin IntelliJ thực hiện công việc. –

4

Tôi đã tìm thấy Điều này page về các câu hỏi thường gặp về WTP Eclipse, giải thích cách cấu hình Eclipse để bạn có thể truy cập vào mã java được tạo ra bằng cách nhấp vào stacktrace.

+0

+1, nhưng vẫn còn - điều này sẽ mang lại cho bạn để tạo mã java chỉ, không phải bản gốc JSP. – Juraj

0

Tôi đã từng sử dụng chương trình trong Lex và Yacc để tạo mã C và bạn có thể bật chỉ thị xử lý trướC# dòng để gỡ lỗi. Khi một cái gì đó xảy ra trong mã c được tạo ra, thì IDE đủ thông minh để mở tệp lex hoặc yacc tương ứng, chứ không phải mã c được tạo. Surly

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