2013年7月27日土曜日

ApacheとTomcatの連携方法

ApacheとTomcatの連携に関する備忘録を残す。
httpd.confとserver.xmlを編集するだけで良い。

尚、動作確認済みのバージョンは、以下である。
・Apache 2.2
・Tomcat 7

1.Tomcatのserver.xmlを以下のように編集する。
  (パスの例:Apache Software Foundation\Tomcat 7.0\conf\server.xml)
  ①Connectorタグのport="8080"の記述部分を以下のようにコメントアウトする。
     <!--
       <Connector executor="tomcatThreadPool"
                port="8080" protocol="HTTP/1.1"
                connectionTimeout="20000"
                redirectPort="8443" />
     -->
  ②Connectorタグのport="8009"の記述部分が有効であること(コメントアウトがない)を確認する。
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
2.Apacheのhttpd.confを以下のように編集する。
  (パスの例:Apache Software Foundation\Apache2.2\conf\httpd.conf)
  ①以下の記述を有効にする。(#のコメントアウトをとる。)
   LoadModule proxy_module modules/mod_proxy.so
   LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
  ②Tomcatのwebappsに配置するwebアプリケーションルートを以下のように記述し、httpd.conf
   の最下行に追記する。
   <Location /examples/>
     ProxyPass ajp://localhost:8009/examples/
   </Location>

 3.http://localhost/examples/ でアクセスできることを確認する。
   ポート8080は不要となる。

ドメイン取得しました!

久しぶりの投稿です。
昨日は、自分で作成したWebサイトやシステムをインターネットに公開していけるように以下の作業を行いました。

1.ムームードメインでドメインの取得
  http://muumuu-domain.com/
  自分の欲しいドメイン名が残っているか、検索して申し込めばよいです。
  ドメインによって値段が異なります。
  私は、年間1000円未満のものを申し込みました。

2.Amazon EC2 Elastic IPsで固定IPの取得
  サーバーは、Amazonのクラウドを利用していますが、インスタンスの停止、再起動の度に割り   当てられるIPアドレスが変わってしまうため、固定IPを取得することにしました。
  EC2 Management ConsoleのNetwork & SecurityのElastic IPsから取得できます。
  ただし、有料になります。取得後は、インスタンスへの割り当てが必要です。
  IPアドレスの横のチェックボックスにチェックを入れて、Associate Addressボタンをクリックし、
  インスタンスを選択して実行すればよいです。

3.ドメインと固定IPの設定
  ムームードメインのコンパネで設定できます。
  Amazon EC2では、DNSの設定はできないようですね。

2013年2月11日月曜日

ServletContext getRealPathについて

右クリックで「ソースの表示」を行うと、以下のリアルなパスが丸見えとなってしまうため、
今後も使う機会はないと思うが、使用したことがなかったので備忘録として記載する。

■リアルパス
C:\〰\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ProjectName\WEB-INF/image/logo.gif

■サーブレットの例
import javax.servlet.ServletContext;

@Controller
public class LoginFormController implements ServletContextAware {

 private String realPath;

@Override
 public void setServletContext(ServletContext arg0) {
  this.realPath = arg0.getRealPath("/");
 }

 @RequestMapping(value="/", method = RequestMethod.GET)
 public ModelAndView showLogin(){
  ModelAndView modelAndView = new ModelAndView();
  modelAndView.addObject("realPath",realPath);
  modelAndView.setViewName("loginform/login");
  return modelAndView;
 }

■JSPの例
<img src="${realPath}WEB-INF/image/logo.gif" style="zoom: 0.7;">

2013年1月23日水曜日

データベースの値に基づくラジオボタンのチェック表示


データベースに登録されている値から動的にラジオボタンにチェックする方法について、
0の場合は、無効にチェックし、1の場合は有効にチェックする例。
以下は、無駄の多いコード。

   <c:choose>
    <c:when test="${subjectDTO.deleteFlag==0}">
     <input type=radio name="deleteFlag" value="0" checked>有効
    </c:when>
    <c:otherwise>
     <input type=radio name="deleteFlag" value="0" />有効
    </c:otherwise>
   </c:choose>
   <c:choose>
    <c:when test="${subjectDTO.deleteFlag==1}">
     <input type=radio name="deleteFlag" value="1"  checked/>無効
    </c:when>
    <c:otherwise>
     <input type=radio name="deleteFlag" value="1"/>無効
    </c:otherwise>
   </c:choose>

これをちょっと整理してみた。

   <c:choose>
    <c:when test="${subjectDTO.deleteFlag==0}">
     <input type=radio name="deleteFlag" value="0" checked>有効
     <input type=radio name="deleteFlag" value="1"/>無効
    </c:when>
    <c:otherwise>
     <input type=radio name="deleteFlag" value="0" />有効
     <input type=radio name="deleteFlag" value="1" checked/>無効
    </c:otherwise>
   </c:choose>

さらに、以下のようにしてみた。

   <c:forEach var="i" begin="0" end="1" step="1">
    <c:choose>
     <c:when test="${subjectDTO.deleteFlag == i}">
      <input type=radio name="deleteFlag" value="${i}" checked>ラベル${i}
     </c:when>
     <c:otherwise>
      <input type=radio name="deleteFlag" value="${i}" />ラベル${i}
     </c:otherwise>
    </c:choose>
   </c:forEach>

上記の例では、forEachでまわす回数は、ラジオボタンの個数分(0、1)としているが、
end部分を変数として与えることで任意の個数についても対応可能となる。

2013年1月20日日曜日

JavaScriptによる画面遷移

document.location = URI とすればよい。
便利です。

<input type="button" onclick="document.location = 'loginform/menu';" value="メニューへ"  >

ブラウザの戻るボタンの無効化

ブラウザの戻るボタンで戻らせたくないページに
以下のJavaScriptコードを埋め込むと、戻るボタンが効かなくなる。

<SCRIPT Language="JavaScript">
<!--
 history.forward();
// -->
</SCRIPT>

<問題点>
・IE8のみで動作確認済み。他のブラウザも検証が必要。

・ブラウザの設定でJavaScriptを無効にしている場合は、
 戻るボタンは、当然、有効である。

以下のようにページキャッシュを破棄する方法もあわせて検討が必要。

<%
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);

%>

ServiceとかDTOとかDAOとかの作る順序って・・・

JSPとかDTOとかControllerとか作る順序でとまどった記憶がある。 現在は、以下のように、データベースに近い部分から作成しているが、どうなんだろうか。
  1. DDL発行
  2. DTOクラス
  3. DAOインタフェース
  4. DAO実装クラス
  5. Serviceインタフェース
  6. Service実装クラス
  7. Controllerクラス
  8. JSP、JavaScript(画面作成)
流れとしては、
まずは、テーブルを作成。
次に、テーブルから取得したデータを保持するDTOを作成。
その次に、データベースにアクセスして取得したデータをDTOにセットするDAOを作成。
残りは、それらを使っていろいろデータを加工するロジックと
コントローラが扱いやすい形でオブジェクトやフィールドデータを提供するサービス部分を作成。
最後にコントローラと画面を調整しながら作成。

一般的には、トップからインタフェースを全て定義して実装していくのだろうか。
うーん。。。