針對以JSP與Java的編譯問題, 平時不會那麼在乎, 可這個問題很嚴重

針對於JSP頁面編譯問題. java


好好總結一下今天下午和同事碰見的一個平時不是那麼在乎的問題,搞了個半天.

針對於JSP頁面編譯問題.
咱們來看看JSP的編譯問題:由於JSP在執行第一次後,會被編譯成Servlet的類文件,即.class,當再重複調用執行時,就直接執行第
一次所產生的Servlet,而再也不從新把JSP編譯成Servelt。
所以,除了第一次的編譯會花較久的時間以外,以後JSP和Servlet的執行速度就幾乎相同了。 當JSP網頁在執行時,JSP Container 會作檢查工做,若是發現JSP網頁有更新修改時,JSP Container 纔會再次編譯JSP成 Servlet; 若是JSP沒有更新時,就直接執行前面所產生的Servlet.

然而, 咱們JSP又會時常的調用Java代碼, 而咱們你們的Java代碼會時刻注意,常常的會時刻的編譯,更新. 而你頁面

web

Java代碼裏面:     tomcat

public class Constants{
          // 以前的代碼
          public static final String FUID = 1;

          // 改動以後的代碼, 將String 修改成 int
          public static final int FUID = 1;
}




而JSP一直沒有變,也不須要改變.
     
<input type="hidden" value="<%=Constants.FUID%>" />




因此,當訪問改JSP頁面是, 它的class仍是以前的,由於你沒有改動過文件,然後臺的Java已經改變,因此會報錯,說找不到FUID(String)的. 由於你已是int類型的FUID了.

解決方法就是: 每次重啓時, 都須要刪掉 ~/tomcat/work/Catalina/localhost/webProject/* 的全部文件,讓它從新編譯.
大概就是這麼個意思,不知道你們看明白了.若是一直是這麼作的, 那就沒問題了.
相關文章
相關標籤/搜索