jsp負荷定数の検討

2542 ワード

今日、jspロード定数の問題に遭遇しました.
コードは次のとおりです.
 
public class SystemConstant {
    public static final int LSSV = 188;

    public int OFD = 1;
}
 
jspページコードは以下の通りです.
 
<%@page import="com.zj.logistics.util.SystemConstant"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>  
  <% 
  	out.println("static:" + SystemConstant.LSSV);
  	out.println("not static:" + new SystemConstant().OFD);
  %>
</body>
</html>
 
tomcatを起動すると、結果も簡単です.ページ出力static:188 not static:1
 
ただし、systemconstantのLSSVを126に、OFDの値を2に変更すると、保存後、jspページが動かなくなり、問題が発生します.
ページ表示:static:188 not static:2
すなわち、LSSVの値はインタフェース上で変化しない.
いろいろな方法を考えました.プロジェクトを再配置する.2.プロジェクトの再コンパイル3.tomcatを再起動する.4.パソコンを再起動します.いずれも成功しなかった
最終的には、tomcatが実行され、任意の場所にスペースを追加して保存するなど、jspページを少し変更する方法しかありません.ブラウザを更新しました.
 
その原因を究明する:
1.最終的な方法では、tomcatはjspページを再reloadingし、再コンパイルし、新しいclassファイルを生成し、アクセスを成功させる.
2.前のいくつかの方法の失敗は、jspのclassファイルにstatic final int LSSVの値参照が保持されている可能性があります.すなわち、classにはメモリアドレスではなく特定の値が格納されています.
テストにより、static final int LSSVをstatic final Integer LSSVに変更した後、Integerに変更した後、jspのclassにはこの変数に対するアドレス参照が保持されているという問題は存在しないことが分かった.
 
問題:
プロジェクトが大きい場合、systemconstantに多くの定数があり、jspにもこれらの定数が引用されている場合、systemconstantの定数を変更する日があるのではないでしょうか.jspごとに保存しますか.
 
上記の中には、systemconstantのintを検索方法でIntegerに置き換える方法がありますが、隠れた危険も残っています.
例:
 
 
switch(method) {
		case SystemConstant.UFSV_UPLOADUI : 
			this.gotoUploadFileUI(request, response); break;
		case SystemConstant.UFSV_UPLOAD : 
			this.uploadFile(request, response); break;

あなたのバックエンドはswitch条件判断を使用しています.jdk 7以降、caseの後のパラメータは定数タイプであることが要求されています.intをIntegerに変更した後、エラーが発生し、Integerタイプを定数タイプに変換する方法も見つかりません.
 
D:apache-tomcat-7.0.27workCatalinalocalhostプロジェクト名orgapachejspWEB_002 dINFディレクトリの下でjspに対応するjavaとclassファイルを削除することで、目的を達成できます.