Làm thế nào tôi có thể gỡ lỗi một JSP?


26

Tôi đang cố gắng chỉnh sửa một JSP cho một dự án và tôi đang nhận được một NullPulumException ở đâu đó trong JSP khi nó được yêu cầu từ máy chủ của tôi.

Máy chủ web của tôi (JBoss) đang báo cáo ngoại lệ, nhưng nó cho tôi số dòng không có thật. Nó báo cáo rằng ngoại lệ đã xảy ra trên dòng 702, nhưng tệp JSP của tôi chỉ dài 146 dòng, vì vậy tôi không thể xác định dòng nào bị nghẹt.

Một số kỹ thuật tốt để gỡ lỗi trong các tệp JSP là gì? Tôi đang sử dụng IntelliJ 9 Ultimate làm IDE của mình.

Cảm ơn


1
có thể được hỏi trên Stackoverflow.com
Abimaran Kugathasan

1
Được. Xin lỗi, tôi không hoàn toàn rõ ràng về sự khác biệt giữa StackOverflow.com và Lập trình viên.StackExchange.com. Tôi không chắc câu hỏi nào thuộc về nơi nào .. Tôi đã đọc Câu hỏi thường gặp dành cho lập trình viên.stackexchange nhưng nó hơi mơ hồ.
ampersandre

3
Trên thực tế tôi không chắc chắn rằng điều này sẽ ổn trên Stack Overflow. Mặc dù nó khá cụ thể nhưng không đủ chi tiết cụ thể (do bản chất của vấn đề). Những gì bạn đang theo là các kỹ thuật sửa lỗi nên có chủ đề cho trang web này.
ChrisF

bạn đã bao gồm bất kỳ jsps trong jsp của bạn? Đó là cách số dòng có thể tăng. Câu hỏi cần được chuyển sang stackoverflow
trừSeven

Một kỹ thuật là xem các tệp biên dịch: codeinventions.blogspot.com/2014/08/ từ
Suresh Atta

Câu trả lời:


29

Có một số tùy chọn có thể giúp bạn:

  1. Câu trả lời này thực sự giải thích cách gỡ lỗi các tệp tin cụ thể: https://stackoverflow.com/questions/33739/jsp-debugging-in-intellij-idea . Tôi chưa bao giờ thử điều này vì vậy tôi đã làm theo ba gợi ý tiếp theo khi tôi đang sử dụng JSP, JBoss và IntelliJ ...

  2. Hãy nhớ rằng các tệp tin được biên dịch thành các lớp. Khi nó nói dòng 702, nó có nghĩa là trong lớp biên dịch. Nếu bạn có test.jsp, tên lớp có lẽ là test_jspvậy, vì vậy hãy mở thư mục công việc JBoss của bạn và tìm kiếm test_jsp.java(một khi bạn tìm đúng thư mục, bạn sẽ thấy cấu trúc thư mục khớp với cấu trúc thư mục JSP của bạn). Bất cứ khi nào tôi có một ngoại lệ JSP, tôi có thể tìm thấy dòng này khá dễ dàng và thường khớp nó với dòng tương ứng trong JSP.

  3. Các điểm dừng hoạt động tốt trong các lớp Java được gọi từ một tệp JSP. Vì vậy, có lẽ bạn có thể di chuyển mã tập lệnh Java mà bạn có trong tệp JSP của mình vào một lớp và gỡ lỗi từ điểm vào. Trong tương lai, bạn cũng có thể tạo thói quen sắp xếp lại logic của mình để phần lớn trong số đó nằm trong một lớp được gọi từ JSP, và JSP đơn giản, đơn giản và hy vọng không đưa ra bất kỳ ngoại lệ nào. Đây là thực hành tốt anyway.

  4. Tốt hơn hết, hãy loại bỏ tất cả (hoặc hầu như tất cả) logic Java vào các lớp Java, để lại các tệp JSP cho các thẻ HTML và JSP. Tôi biết điều này không khả thi ngay lập tức, nhưng một lần nữa, đó là một ý tưởng tốt về lâu dài để tránh những vấn đề như thế này.


2
+1 để loại bỏ logic khỏi JSP. Có thể thấy nhiều hơn về điều này trong các thực tiễn tốt nhất của JSP / Servlet, với kiến ​​trúc Mô hình 2 (MVC): oracle.com/technetwork/articles/javase/servlets-jsp-140445.html
bunglestink

Cảm ơn! Tùy chọn 4 là lý tưởng, tôi đồng ý, nhưng chúng tôi không có sự tách biệt khung nhìn / bộ điều khiển tuyệt vời trong dự án này.
ampersandre

1
Cũng +1 cho mục số 2. Tôi không có ý tưởng để tìm các *_jsp.javalớp học.
scottyseus

2
xóa tất cả logic khỏi các tệp tin trên một dự án có hàng ngàn tệp tin, mỗi tệp chứa hàng nghìn dòng scriptlets ... không, cảm ơn, chỉ muốn gỡ lỗi Hashtables và vectơ. FML :-( </ rant> câu trả lời hay mặc dù
Peter Perháč

-1

Bạn có thể gỡ lỗi một trang JSP dễ dàng giống như mã java:
"một tệp tin giống như gỡ lỗi một lớp Java, nhưng hầu hết các tính năng (Xem, Kiểm tra, v.v.) không được triển khai. Cách duy nhất để có được các giá trị của các biến là chế độ xem Biến. "
Xem liên kết dưới đây:
https://www.laliluna.de/articles/posts/debugging-jsp-java-tutorial.html


4
Khi trả lời một câu hỏi cũ hơn đã có câu trả lời được đón nhận, vui lòng thêm chi tiết hơn vào câu trả lời của bạn để bạn giải quyết vấn đề chưa được đề cập.
gnat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.