2011-07-26 64 views
19

Tôi đang nhận được một javax.servlet.jsp.JspException trong một trong các tệp jsp mà trang web của tôi đang cố gắng hiển thị (survey.jsp). Tuy nhiên, dấu vết ngăn xếp không cho tôi dòng cụ thể trong jsp nơi nó bị lỗi nhưng thay vào đó là số dòng mà nó không thành công (survey_jsp.java:787), có vẻ như là tệp JSP được biên dịch. Tôi tìm các tệp đó ở đâu, để tôi biết dòng nào đang ném ngoại lệ này?Các tệp JSP Java (* __ jsp.java) được biên dịch ở đâu?

Cảm ơn

EDIT: Những tập tin này sống trong thư mục /work nếu bạn đang sử dụng tomcat như Will đề nghị trong các bình luận bên dưới.

+7

ứng dụng gì máy chủ bạn đang sử dụng? Nó thay đổi tùy thuộc vào máy chủ ứng dụng (và cấu hình). Tomcat mặc định là thư mục/work. –

+0

Tôi đang sử dụng tomcat. – Sam

Trả lời

48

Tệp JSP đã biên dịch theo mặc định có sẵn trong thư mục /work của môi trường Tomcat. Sẽ có một thư mục con Catalina mà lần lượt có một thư mục con đại diện cho tên miền mặc định là localhost. Có lần lượt phải là thư mục dự án mà lần lượt chứa hệ thống phân cấp gói org.apache.jsp với các tệp JSP được biên dịch.

Tomcat 
|-- backup 
|-- bin 
|-- conf 
|-- lib 
|-- logs 
|-- temp 
|-- webapps 
`-- work 
     `-- Catalina 
      `-- localhost 
       `-- projectname 
        `-- org 
          `-- apache 
           `-- jsp 
            |-- survey_jsp.class 
            `-- survey_jsp.java <--- here 

Không liên quan cho vấn đề cụ thể, cần có một nguyên nhân gốc rễ phần trong stacktrace của JspException mà thường chứa chi tiết thêm về nguyên nhân gốc rễ thực sự của vấn đề. Đọc thêm một chút trong stacktrace. Nhân tiện, bạn có biết rằng việc đặt mã Java thô trong các tệp JSP được coi là một bad practice không? Nó làm cho vấn đề khó khăn hơn để gỡ lỗi như bạn gặp phải bây giờ.

+0

Tôi đang sử dụng thanh chống để thực thi cấu trúc MVC, vì vậy không có java thô nào đang được sử dụng bên trong jsp. Lỗi phát sinh vì nó "Không thể tìm thấy bean:" blah "trong bất kỳ phạm vi" – Sam

+0

Sau đó, tìm mã nguồn Java được tạo không cung cấp thêm lợi ích nào. Nó sẽ chỉ là tất cả abracadabra cho bạn. Các công việc thực tế cần được thực hiện trên sự hiểu biết thông báo lỗi * real * (mà cuối cùng bạn đã tìm ra trong stacktrace) và sau đó sửa chữa khung nhìn/mô hình/cấu hình cho phù hợp. I E. đảm bảo rằng hạt "blah" nằm trong phạm vi. – BalusC

+0

Tôi chưa bao giờ thấy các tệp JSP mà không có mã Java thô, tbh. –

5

Nếu trang không biên dịch, bạn nên tìm nó ở đâu đó bên dưới <tomcat>/work/*. Đường dẫn đầy đủ phụ thuộc vào môi trường của bạn. Nếu bạn không thể tìm thấy nó ở đó, bạn nên bắt đầu Tomcat của bạn trong chế độ gỡ lỗi, nó chắc chắn giữ .java tệp không biên dịch được (Tomcat 7).

0

từ tài liệu oracle

javax.servlet.jsp.JspException :: Một ngoại lệ chung được biết đến với động cơ JSP; JspExceptions chưa được khai thác sẽ dẫn đến việc triệu gọi máy móc errorpage.

tôi thậm chí sử dụng để có được điều này bất cứ khi nào tôi được sử dụng scriplets trong mã của tôi

lời khuyên của tôi: không sử dụng scripltes thậm chí nó có thể dường như để phát triển mã dễ dàng, nhưng với tất cả các khía do, một đầu lớn của nó - đau đến duy trì mã scriplets. TRUST ME

3

Tôi đang sử dụng Intellij để tìm hiểu JavaEE và để xem một số tính năng khi jsp dịch thành servlet, tôi cũng phải tìm tệp đó.

Tôi không tìm thấy nó bên dưới <tomcat_home>/work/*. Cuối cùng tôi thấy rằng tệp nằm trong thư mục ~/.IntelliJIdea15/system/tomcat/ (cấu trúc cây hiển thị từ ~/.IntelliJIdea15/system/tomcat/)!

Name related to project name 
|-- conf 
|-- logs 
`-- work 
     `-- Catalina 
      `-- localhost 
       `-- projectname and type 
        `-- org 
          `-- apache 
           `-- jsp 
            |-- survey_jsp.class 
            `-- survey_jsp.java <--- here 

Nếu bạn vẫn không thể tìm thấy nó trong thư mục nhà Intellij, bạn có thể thử sử dụng

find . | grep 'nameOfYourJsp_jsp.java' 

trong thư mục mẹ phù hợp.

+0

Đây chỉ là trường hợp nếu IDE được cấu hình để quản lý kiểm soát từ máy chủ. Điều này không đúng trong môi trường sản xuất bình thường. – BalusC

+0

Tôi không tạo bất kỳ cấu hình nào cho nó. Vì vậy, nó là hành vi mặc định của intellij? – Tony

1

Trong trường hợp của tôi, JSP được biên soạn dưới

/var  
    |--cache  
     |-- tomcat8  
      |--Catalina 
        |--localhost 
          |--projectname 
           |-- (etc...) 
Các vấn đề liên quan