<?xml version="1.0" encoding="UTF-8" ?>
<rss version="0.91">
  <channel>
    <title>毎日勉強頑張ってます！</title>
    <description>やった事を書き綴る</description>
    <link>http://manabukun.blog.shinobi.jp/</link>
    <language>ja</language>
    <copyright>Copyright (C) NINJATOOLS ALL RIGHTS RESERVED.</copyright>

    <item>
      <title>JNDIの接続設定</title>
      <description>&lt;p&gt;Struts1.3でJNDI接続　PostgreSQL&lt;br /&gt;
【環境】&lt;br /&gt;
Eclipse3.4.1&lt;br /&gt;
JDK1.6&lt;br /&gt;
TOMCAT5.5&lt;br /&gt;
Struts1.3&lt;br /&gt;
PostgreSQL8.2.1&lt;/p&gt;
&lt;p&gt;環境がおかしくなったのでプロジェクト作り直し。&lt;br /&gt;
1.動的Webプロジェクトを作成&lt;/p&gt;
&lt;p&gt;2.struts-blank-1.3.9.warのJarファイルをWEB-INF\libに展開する。&lt;br /&gt;
antlr-2.7.2.jar&lt;br /&gt;
commons-beanutils-1.7.0.jar&lt;br /&gt;
commons-chain-1.1.jar&lt;br /&gt;
commons-digester-1.8.jar&lt;br /&gt;
commons-logging-1.0.4.jar&lt;br /&gt;
commons-validator-1.3.1.jar&lt;br /&gt;
oro-2.0.8.jar&lt;br /&gt;
struts-core-1.3.9.jar&lt;br /&gt;
struts-taglib-1.3.9.jar&lt;br /&gt;
struts-tiles-1.3.9.jar&lt;/p&gt;
&lt;p&gt;3.DBCP(コネクションプール)を使う為、下記の３つのコンポーネントを取得。&lt;br /&gt;
Jakarta-Commons DBCP&lt;br /&gt;
Jakarta-Commons Collections&lt;br /&gt;
Jakarta-Commons Pool&lt;br /&gt;
%TOMCAT_HOME%\common\libに配置する。&lt;/p&gt;
&lt;p&gt;4.設定ファイル等々&lt;br /&gt;
・%TOMCAT_HOME%\conf\context.xml&lt;br /&gt;
　&amp;lt;Context&amp;gt;の後に&amp;darr;の記述があるはずなのに&lt;br /&gt;
==============================================&lt;br /&gt;
&amp;nbsp; &amp;lt;WatchedResource&amp;gt;WEB-INF/web.xml&amp;lt;/WatchedResource&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;WatchedResource&amp;gt;META-INF/context.xml&amp;lt;/WatchedResource&amp;gt;&lt;br /&gt;
==============================================&lt;br /&gt;
　　※2行目の記述がなかったので追記&lt;/p&gt;
&lt;p&gt;・WebContent/META-INFにcontext.xmlを新規作成。&lt;br /&gt;
==============================================&lt;br /&gt;
&amp;nbsp;&amp;lt;Context path=&amp;quot;/testap&amp;quot; docBase=&amp;quot;testap&amp;quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug=&amp;quot;5&amp;quot; reloadable=&amp;quot;true&amp;quot; crossContext=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Logger className=&amp;quot;org.apache.catalina.logger.FileLogger&amp;quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prefix=&amp;quot;localhost_testap_log.&amp;quot; suffix=&amp;quot;.txt&amp;quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timestamp=&amp;quot;true&amp;quot;/&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Resource name=&amp;quot;jdbc/postgres&amp;quot; auth=&amp;quot;Container&amp;quot;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#339966&quot;&gt;//Resource nameでアクセスされる。&lt;/font&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type=&amp;quot;javax.sql.DataSource&amp;quot; driverClassName=&amp;quot;org.postgresql.Driver&amp;quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; url=&amp;quot;jdbc:postgresql://127.0.0.1:5432/sbt&amp;quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; username=&amp;quot;postgres&amp;quot; password=&amp;quot;admin&amp;quot; maxActive=&amp;quot;20&amp;quot; maxIdle=&amp;quot;10&amp;quot; maxWait=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;/Context&amp;gt;&lt;br /&gt;
==============================================&lt;br /&gt;
上記設定内容&lt;br /&gt;
Path：testap&lt;br /&gt;
postgreSQLのポート：5432&lt;br /&gt;
データベース名：sbt&lt;br /&gt;
ユーザー：postgres&lt;br /&gt;
パスワード：admin&lt;/p&gt;
&lt;p&gt;・web.xmlの編集　&lt;font color=&quot;#339966&quot;&gt;//welcomeファイルの次&lt;br /&gt;
&lt;/font&gt;==============================================&lt;br /&gt;
&amp;nbsp;&amp;lt;resource-ref&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;description&amp;gt;postgreSQL Datasource example&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;res-ref-name&amp;gt;jdbc/postgres&amp;lt;/res-ref-name&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;res-type&amp;gt;javax.sql.DataSource&amp;lt;/res-type&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;res-auth&amp;gt;Container&amp;lt;/res-auth&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;lt;/resource-ref&amp;gt;&lt;br /&gt;
==============================================&lt;br /&gt;
5.実装（サンプルソース）&lt;br /&gt;
==============================================&lt;br /&gt;
import javax.servlet.ServletException;&lt;br /&gt;
import javax.sql.DataSource;&lt;br /&gt;
import javax.naming.InitialContext;&lt;br /&gt;
import javax.naming.NamingException;&lt;/p&gt;
&lt;p&gt;public class DbUtil {&lt;br /&gt;
&amp;nbsp;private static DataSource ds;&amp;nbsp;&lt;font color=&quot;#339966&quot;&gt;//DataSourceはスレッドセーフ&lt;/font&gt;&lt;br /&gt;
&lt;font color=&quot;#339966&quot;&gt;&amp;nbsp;/**&lt;br /&gt;
&amp;nbsp; * DataSourceを必要に応じてJNDI経由で取得する。&lt;br /&gt;
&amp;nbsp; */&lt;/font&gt;&lt;br /&gt;
&amp;nbsp;public static DataSource getDataSource() throws ServletException{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;if (ds == null){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#339966&quot;&gt;//JNDI経由でDataSourceを取得する&lt;br /&gt;
&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitialContext context = new InitialContext();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ds = (DataSource)context.lookup(&amp;quot;java:comp/env/jdbc/postgres&amp;quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;} catch (NamingException e) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw new ServletException(e);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;return ds;&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
}&lt;br /&gt;
==============================================&lt;br /&gt;
import java.sql.Connection;&lt;br /&gt;
import java.sql.DatabaseMetaData;&lt;br /&gt;
import java.sql.PreparedStatement;&lt;br /&gt;
import java.sql.ResultSet;&lt;br /&gt;
import javax.sql.DataSource;&lt;/p&gt;
&lt;p&gt;public class loginAction extends Action {&lt;br /&gt;
&amp;nbsp;Connection con = null;&lt;br /&gt;
&amp;nbsp;PreparedStatement ps = null;&lt;br /&gt;
&amp;nbsp;ResultSet rs = null;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;DataSource ds = DbUtil.getDataSource();&lt;br /&gt;
&amp;nbsp;con = ds.getConnection();&lt;br /&gt;
&amp;nbsp;DatabaseMetaData md = con.getMetaData();&lt;br /&gt;
&amp;nbsp;ps = con.prepareStatement(&amp;quot;select ｘｘｘｘｘｘ&amp;quot;);&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp;rs = ps.executeQuery();&lt;br /&gt;
&amp;nbsp;&amp;hellip;&lt;br /&gt;
}&lt;br /&gt;
==============================================&amp;nbsp;&lt;/p&gt;</description> 
      <link>http://manabukun.blog.shinobi.jp/java%E3%83%BBweb%E3%82%A2%E3%83%97%E3%83%AA/jndi%E3%81%AE%E6%8E%A5%E7%B6%9A%E8%A8%AD%E5%AE%9A</link> 
    </item>
    <item>
      <title>validatorメモ　使えないね・・・・</title>
      <description>&lt;p&gt;validation.xml(抜粋)&lt;br /&gt;
□骨格になる部分&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;Shift_JIS&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE form-validation PUBLIC&lt;br /&gt;
&amp;nbsp; &amp;quot;-//Apache Software Foundation//&lt;br /&gt;
DTD Commons Validator Rules Configuration 1.0//EN&amp;quot;&lt;br /&gt;
&amp;nbsp;&amp;quot;&lt;a href=&quot;http://jakarta.apache.org/commons/dtds/validator_1_0.dtd&quot;&gt;http://jakarta.apache.org/commons/dtds/validator_1_0.dtd&lt;/a&gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form-validation&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;formset&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;form name=&amp;quot;アクションフォームBeansの論理名&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--検証内容の定義--&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--&amp;lt;form&amp;gt;要素を繰り返し記述--&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;/formset&amp;gt;&lt;br /&gt;
&amp;lt;/form-validation&amp;gt;&lt;br /&gt;
□個々のフィールドに対する記述&lt;br /&gt;
&amp;lt;field property=&amp;quot;title&amp;quot; depends=&amp;quot;required,maxlength&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;arg0 key=&amp;quot;タイトル&amp;quot; resource=&amp;quot;false&amp;quot; /&amp;gt; &amp;lt;!--keyはエラー時に表示される文字列--&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;arg1 name=&amp;quot;maxlength&amp;quot; key=&amp;quot;${var:maxlength}&amp;quot; resource=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;var&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;var-name&amp;gt;maxlength&amp;lt;/var-name&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;var-value&amp;gt;100&amp;lt;/var-value&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;/var&amp;gt;&lt;br /&gt;
&amp;lt;/field&amp;gt;&lt;br /&gt;
※key属性には｢パラメータ値そのもの｣か｢プロパティファイルのキー名｣を指定する。&lt;br /&gt;
　ただし、プロパティファイルを引用する場合は、resource属性値を&amp;quot;true&amp;quot;に設定する。&lt;br /&gt;
　また、${var:XXXX}のようにすると、var要素で指定した編数値を引用することも出来る。&lt;br /&gt;
例)&lt;br /&gt;
　&amp;lt;arg0 name=&amp;quot;maxlength&amp;quot; key=&amp;quot;100&amp;quot; resource=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
　&amp;lt;arg1 name=&amp;quot;maxlength&amp;quot; key=&amp;quot;maxlength.max&amp;quot; resource=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
　&amp;lt;arg2 name=&amp;quot;maxlength&amp;quot; key=&amp;quot;${var:maxlength}&amp;quot; resource=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;
　　&amp;lt;var-name&amp;gt;maxlength&amp;lt;/var-name&amp;gt;&lt;br /&gt;
　　&amp;lt;var-value&amp;gt;20&amp;lt;/var-value&amp;gt;&lt;br /&gt;
　　&lt;br /&gt;
　&lt;/p&gt;
&lt;p&gt;■Validatorを利用する場合の基本的な設定&lt;br /&gt;
1.継承をValidatorFormに変更する。&lt;/p&gt;
&lt;p&gt;2.Validatorルールをvalidation.xmlに記述する。Validator自体の動作はvalidator-rules.xmlに定義されている。&lt;/p&gt;
&lt;p&gt;3.メッセージ・リソースファイルに表示するエラーメッセージを記述する。&lt;/p&gt;
&lt;p&gt;4.struts-config.xmlにValidator関連の設定をする。&lt;/p&gt;</description> 
      <link>http://manabukun.blog.shinobi.jp/java/validator%E3%83%A1%E3%83%A2%E3%80%80%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%84%E3%81%AD%E3%83%BB%E3%83%BB%E3%83%BB%E3%83%BB</link> 
    </item>
    <item>
      <title>WEBアプリケーションのセキュリティについて考えないと</title>
      <description>&lt;p&gt;■WEBアプリの課題&lt;br /&gt;
・URL直接入力&lt;br /&gt;
・戻るボタン&lt;br /&gt;
・2度押し&lt;br /&gt;
・マルチウィンドウ&lt;br /&gt;
の抑止（よくし）&lt;/p&gt;
&lt;p&gt;1.リダイレクト&lt;br /&gt;
[リダイレクトとフォワードの違いを知る]&lt;br /&gt;
・リダイレクト&lt;br /&gt;
　　response.sendRedirect(&amp;quot;遷移先のページ&amp;quot;);&lt;br /&gt;
　＊リダイレクトはサーバがクライアントにリダイレクトの指示を出し、クライアントが&lt;br /&gt;
　　自動的に要求をする。&lt;/p&gt;
&lt;p&gt;・フォワード&lt;br /&gt;
　　application.getRequestDispatcher(&amp;quot;転送先のページ&amp;quot;).forward(request, response);&lt;br /&gt;
　＊クライアントからの要求に対し、サーバ内でページへ処理が移送され、クライアントに返す。&lt;/p&gt;
&lt;p&gt;★パフォーマンスは　フォワード＞リダイレクト&lt;br /&gt;
★フォワードは同一サーバ内ページ(クラス)間でしか利用出来ない。&lt;br /&gt;
★リクエスト情報を引き継げるのはフォワードのみ。&lt;/p&gt;
&lt;p&gt;2.ポストバック&amp;times;&lt;br /&gt;
3.可変個数のパラメータをPOSTで送信する。&lt;/p&gt;
&lt;p&gt;[参考サイト]&lt;br /&gt;
&lt;a href=&quot;http://forza.cocolog-nifty.com/blog/2008/02/index.html&quot;&gt;http://forza.cocolog-nifty.com/blog/2008/02/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;■HTTPの仕組み&lt;br /&gt;
・HTTPはリクエストから始まる&lt;br /&gt;
　　GET /test.html?param1=value1&amp;amp;param2=value2 HTTP/1.1&lt;br /&gt;
　　Accept: image/gif, image/......&lt;br /&gt;
　　Accept-Lenguage: ja&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ....&lt;/p&gt;
&lt;p&gt;　1行目は、リクエストライン(Request-Line)と呼ばれる。&amp;darr;書式&lt;br /&gt;
　「メソッド リクエストURI HTTPバージョン」&lt;br /&gt;
　・メソッド&amp;hellip;GETやPOST&lt;br /&gt;
　・リクエストURI&amp;hellip;URL中の絶対パス以降の部分&lt;br /&gt;
　2行目以降は、リクエストヘッダと呼ばれる。&amp;darr;書式&lt;br /&gt;
　「ヘッダ名: ヘッダ値」&lt;br /&gt;
　★GETメソッドの場合、最後に改行のみの行を送ることでHTTPリクエストが終了する。&lt;/p&gt;
&lt;p&gt;・POSTの場合―GETとどう違うか？&lt;br /&gt;
　例)&amp;darr;のようなformが記述されている場合&lt;br /&gt;
　&amp;lt;form action=&amp;quot;test.html?get1=value1&amp;amp;get2=value2&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
　　&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;post1&amp;quot; value=&amp;quot;value1&amp;quot;&amp;gt;&lt;br /&gt;
　　&amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;post2&amp;quot; value=&amp;quot;value2&amp;quot;&amp;gt;&lt;br /&gt;
　　&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;post3&amp;quot; value=&amp;quot;value3&amp;quot;&amp;gt;&lt;br /&gt;
　　&amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;post4&amp;quot; value=&amp;quot;value4&amp;quot; checked&amp;gt;&lt;br /&gt;
　　&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;送信&amp;quot;&amp;gt;&lt;br /&gt;
　&amp;lt;/form&amp;gt;&lt;/p&gt;
&lt;p&gt;　　&amp;darr;のようなHTTPリクエストが送信される。&lt;/p&gt;
&lt;p&gt;　　POST /test.html?get1=value1&amp;amp;get2=value2 HTTP/1.1&lt;br /&gt;
　　Accept: image/gif, image/......&lt;br /&gt;
　　Accept-Lenguage: ja&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ....&lt;br /&gt;
　　....&lt;br /&gt;
　　&lt;br /&gt;
　　post1=value1&amp;amp;post2=value2&amp;amp;post3=value3.....&lt;/p&gt;
&lt;p&gt;　HTTPヘッダより下の部分に、&amp;uarr;のような形でinputタグで指定した値が挿入される。&lt;br /&gt;
　★注文すべきはinputタグのtype属性がHTTPリクエスト内では違いがなくなっている。&lt;br /&gt;
&lt;br /&gt;
■HTTPリクエストの変数&lt;br /&gt;
Acceptヘッダ]　javax.servlet.http.HttpServletRequest#getHeader(&amp;quot;Accept&amp;quot;)&lt;br /&gt;
Refererヘッダ]　javax.servlet.http.HttpServletRequest#getHeader(&amp;quot;Referer&amp;quot;)&lt;br /&gt;
Accept-Languageヘッダ]　javax.servlet.http.HttpServletRequest#getHeader(&amp;quot;Accept-Language&amp;quot;)&lt;br /&gt;
Content-Typeヘッダ]　javax.servlet.ServletRequest#getContentType()&lt;br /&gt;
User-Agentヘッダ]　javax.servlet.http.HttpServletRequest#getHeader(&amp;quot;User-Agent&amp;quot;)&lt;br /&gt;
Hostヘッダ]　javax.servlet.ServletRequest#getServerName()&lt;br /&gt;
Cookieヘッダ]　javax.servlet.http.HttpServletRequest#getCookies()&lt;br /&gt;
Hostヘッダ内ポート番号]　javax.servlet.ServletRequest#getServerPort()&lt;br /&gt;
　※Hostヘッダは｢Host: サーバ名:ポート番号｣と記述出来る&lt;/p&gt;</description> 
      <link>http://manabukun.blog.shinobi.jp/web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3/web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%80%83%E3%81%88%E3%81%AA%E3%81%84%E3%81%A8</link> 
    </item>
    <item>
      <title>strutsをコチョコチョ</title>
      <description>&lt;p&gt;★メモです。すいません。。。&lt;br /&gt;
&lt;br /&gt;
Eclipseにプロジェクト追加&lt;br /&gt;
・Tomcatプロジェクト&lt;br /&gt;
・Strutsサポート追加&lt;br /&gt;
　・Strutsのライブラリ追加&lt;br /&gt;
　・カスタムタグのTLDファイルを追加&lt;br /&gt;
　・struts-config.xmlを生成&lt;br /&gt;
　・MessageResources.propertiesを生成&lt;br /&gt;
　・web.xmlを生成&lt;br /&gt;
[次へ]&lt;br /&gt;
・Validatorプラグインを使用&lt;br /&gt;
・Tilesプラグインを使用(再利用可能な部品を組み合わせたようなHTMLの作成を支援する機能)&lt;br /&gt;
&lt;br /&gt;
=================================~&lt;br /&gt;
package＝グループにまとめる&lt;br /&gt;
・Javaが提供しているクラスと簡単に区別がつく。&lt;br /&gt;
・クラスの分類が出来る。&lt;br /&gt;
？利用スコープを制御するもの&lt;/p&gt;
&lt;p&gt;☆分類方法(下記2パターンが主)&lt;br /&gt;
1.機能ごとに分類する　○&lt;br /&gt;
　機能ごとのパッケージ化は再利用するのに有利になる。&lt;br /&gt;
　※ただし、パッケージへのインターフェイスをしっかり設計する必要がある&lt;br /&gt;
2.利用する技術によって分類する　△&lt;br /&gt;
　EJBをすべて1つのパッケージに入れたり、JSPから利用するクラスを1つにまとめたり&amp;hellip;&lt;br /&gt;
※また、パッケージは階層化することが出来る。&lt;/p&gt;
&lt;p&gt;・まずutilを設置　&amp;hellip;全てPublicで定義&lt;br /&gt;
・actionとformは1箇所にあるほうが理解しやすい&lt;br /&gt;
　&amp;rarr;actionを設置&lt;/p&gt;
&lt;p&gt;3.開発チームの体制とリンクしてパッケージを作成するのも効率的&lt;br /&gt;
　パッケージごとに責任範囲を明確にすることが可能。&lt;br /&gt;
　※パッケージ間の依存関係をできるだけシンプルにしておく。&lt;br /&gt;
　※パッケージが相互利用されないように設計する。&lt;/p&gt;</description> 
      <link>http://manabukun.blog.shinobi.jp/java/struts%E3%82%92%E3%82%B3%E3%83%81%E3%83%A7%E3%82%B3%E3%83%81%E3%83%A7</link> 
    </item>
    <item>
      <title>Cookieとセッション情報に関して</title>
      <description>&lt;p&gt;JSP＆サーブレットでは、複数のページ間で情報を維持するために、２つの方法を提供している。&lt;br /&gt;
■Cookie情報を取得する。&lt;br /&gt;
==============================================&lt;br /&gt;
【サンプル】リスト１で入力したメールアドレスをリスト２でCookieとして保存する。&lt;/p&gt;
&lt;p&gt;[リスト1]cookie.jsp&lt;br /&gt;
&amp;lt;form method=&amp;quot;POST&amp;quot; action=&amp;quot;cookie_rec.jsp&amp;quot;&amp;gt;&lt;br /&gt;
　E-Mailアドレス：&lt;br /&gt;
　　&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot; size=&amp;quot;40&amp;quot; maxlength=&amp;quot;100&amp;quot;&lt;br /&gt;
　　　value=&amp;quot;${cookie['email'].value}&amp;quot; /&amp;gt;　－(3)&lt;br /&gt;
　　&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;送信&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;/p&gt;
&lt;p&gt;[リスト2]cookie_rec.jsp&lt;br /&gt;
&amp;lt;%@ taglib prefix=&amp;quot;c&amp;quot; uri=&amp;quot;&lt;a href=&quot;http://java.sun.com/jsp/jstl/core&quot;&gt;http://java.sun.com/jsp/jstl/core&lt;/a&gt;&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;%@ taglib prefix=&amp;quot;res&amp;quot; uri=&amp;quot;&lt;a href=&quot;http://jakarta.apache.org/taglibs/response-1.0&quot;&gt;http://jakarta.apache.org/taglibs/response-1.0&lt;/a&gt;&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;res:addCookie name=&amp;quot;email&amp;quot;&amp;gt;　－(1)&lt;br /&gt;
　&amp;lt;res:value&amp;gt;${param['email']}&amp;lt;/res:value&amp;gt;&lt;br /&gt;
　&amp;lt;res:maxAge&amp;gt;15552000&amp;lt;/res:maxAge&amp;gt;&lt;br /&gt;
&amp;lt;/res:addCookie&amp;gt;&lt;br /&gt;
&amp;lt;c:redirect url=&amp;quot;cookie.jsp&amp;quot; /&amp;gt;　－(2)&lt;br /&gt;
　*２度目にcookie.jspにアクセスすると、１度目に入力したアドレスが表示される。&lt;br /&gt;
==============================================&lt;br /&gt;
Cookieを保存するには、Responseタグライブラリに含まれる&amp;lt;res:addCookie&amp;gt;タグを&lt;br /&gt;
利用する。(リスト2の(1))　&amp;hellip;ResponseタグライブラリはJakarta Taglibsによるもの&lt;/p&gt;
&lt;p&gt;&amp;lt;res:addCookie&amp;gt;要素は、name属性(Cookie名)と&amp;lt;res:value&amp;gt;要素(Cookie値)、&amp;lt;res:maxAge&amp;gt;&lt;br /&gt;
要素(有効期限)(秒単位)といった設定に基づいて、クライアントにCookieを送信する。&lt;/p&gt;
&lt;p&gt;■Cookieの値を出力する。&lt;br /&gt;
クライアントに保存されたCookieの値にアクセスするには、暗黙オブジェクトCookieの役割。(リスト1の(3))&lt;br /&gt;
ただし、&amp;amp;{cookie['クッキー名']}で返されるのはCookieオブジェクトな為、Cookie値にアクセスする&lt;br /&gt;
には${cookie['email'].value}のように、valueプロパティを介する必要がある。&lt;/p&gt;
&lt;p&gt;■セッションによる情報の引き継ぎ&lt;br /&gt;
==============================================&lt;br /&gt;
【サンプル】リスト１で保存されたセッション情報をリスト２から参照する。&lt;/p&gt;
&lt;p&gt;[リスト1]session1.jsp&lt;br /&gt;
&amp;lt;%@ taglib prefix=&amp;quot;c&amp;quot; uri=&amp;quot;&lt;a href=&quot;http://java.sun.com/jsp/jstl/core&quot;&gt;http://java.sun.com/jsp/jstl/core&lt;/a&gt;&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;hellip;中略&amp;hellip;&lt;br /&gt;
&amp;lt;c:set var=&amp;quot;sample&amp;quot; value=&amp;quot;セッション情報&amp;quot; scope=&amp;quot;session&amp;quot; /&amp;gt;　－(1)&lt;br /&gt;
セッション情報を記録しました。&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;/p&gt;
&lt;p&gt;[リスト2]session2.jsp&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
セッション&amp;quot;sample&amp;quot; =&amp;gt; ${sessionScope['sample']}　－(2)&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;/p&gt;
&lt;p&gt;[リスト3]web.xml&lt;br /&gt;
&amp;lt;session-config&amp;gt;&lt;br /&gt;
　&amp;lt;session-timeout&amp;gt;10&amp;lt;/session-timeout&amp;gt;&lt;br /&gt;
&amp;lt;/session-config&amp;gt;&lt;br /&gt;
==============================================&lt;br /&gt;
セッション情報をセットするのは&amp;lt;c:set&amp;gt;要素の役割(リスト1の(1))&lt;br /&gt;
セッション情報を設定するにはscope属性を明示する必要がある。&lt;br /&gt;
※セッション有効期限はweb.xmlの要素で指定する。(リスト3)&lt;br /&gt;
※セッション情報を破棄したい場合はJakartaTaglibsのSession&lt;br /&gt;
　タグライブラリを使用する。&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
===================================&lt;br /&gt;
■セッションの開始・継続・終了&lt;br /&gt;
・実際の実装方法&lt;br /&gt;
サーブレットにおけるセッション管理を実現するにはHttpSessionを使用する。&lt;br /&gt;
セッションの開始・継続にはHttpServletRequestのgetSessionメソッドを実行する。&lt;br /&gt;
　※開始時は引数にtrueを指定する。継続時はfalseを指定する。&lt;br /&gt;
セッションを終了する場合はHttpSessionのinvalidateメソッドを実行する。&lt;/p&gt;
&lt;p&gt;セッションに値を格納する場合はHttpSessionのsetAttributeメソッドを実行する。&lt;br /&gt;
&amp;nbsp; UserInfo userInfo = new UserInfo(...);&lt;br /&gt;
&amp;nbsp; session.setAttribute(&amp;quot;USER_INFO&amp;quot;, userInfo);&lt;br /&gt;
セッションに格納された値を取得する場合はgetAttributeメソッドを実行する。&lt;br /&gt;
&amp;nbsp; UserInfo userInfo = (UserInfo) session.getAttribute(&amp;quot;USER_INFO&amp;quot;);&lt;br /&gt;
セッションに格納された値を削除する場合はremoveAttributeメソッドを実行する。&lt;br /&gt;
&amp;nbsp; session.removeAttribute(&amp;quot;USER_INFO&amp;quot;);&lt;br /&gt;
&lt;font color=&quot;#ff0000&quot;&gt;※getSessionメソッドの戻り値はHttpSessionになる。このメソッドは引数に関わらず&lt;br /&gt;
　セッション情報が存在するかチェックする。存在している場合は、そのセッションを返す。&lt;br /&gt;
　ただし、存在しない場合は引数により異なる&lt;br /&gt;
　trueの場合&amp;rarr;セッションを新規に作成して返す。&lt;br /&gt;
　falseの場合&amp;rarr;nullを返す。&lt;/font&gt;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
参考サイト&lt;br /&gt;
&lt;a href=&quot;http://www.atmarkit.co.jp/fjava/javafaq/session/session04.html&quot;&gt;http://www.atmarkit.co.jp/fjava/javafaq/session/session04.html&lt;/a&gt;&lt;/p&gt;</description> 
      <link>http://manabukun.blog.shinobi.jp/java/cookie%E3%81%A8%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%81%AB%E9%96%A2%E3%81%97%E3%81%A6</link> 
    </item>
    <item>
      <title>Javaでの時間の取扱いについて</title>
      <description>&lt;p&gt;■Java.util.Date　日時を表現するクラス&lt;br /&gt;
1970年1月1日 00:00:00 GMT(エポック)からのミリ秒数を表すlong値&lt;br /&gt;
　&amp;rArr;日付と時間フィールドの間の変換には、Calendarクラス&lt;br /&gt;
　&amp;rArr;日付文字列のフォーマットと構文解析には、DateFormatクラス&lt;/p&gt;
&lt;p&gt;・現在時刻を取得&lt;br /&gt;
　Date current = new Date();&lt;br /&gt;
&amp;nbsp; curent.toString();　&amp;rarr;Tue Mar 20 13:57:12 JST 2007&lt;/p&gt;
&lt;p&gt;　Date after = new Date(System.currentTimeMillis());　//long型の引数&lt;/p&gt;
&lt;p&gt;■Java.util.Calendar&lt;br /&gt;
・現在時刻を取得（DateFormatクラスと一緒に使用する）&lt;br /&gt;
　Calendar current = Calendar.getInstance();&lt;br /&gt;
　current.toString();　&amp;rarr;java.util.GregorianCalendar[time=117436682144&amp;hellip;&lt;/p&gt;
&lt;p&gt;■型変換&lt;br /&gt;
・DateからCalendarに変換&lt;br /&gt;
　Calendar current = Calendar.getInstance();&lt;br /&gt;
　current.setTime(new Date());&lt;br /&gt;
　&lt;br /&gt;
・CalendarからDateに変換&lt;br /&gt;
　Date current = Calendar.getInstance().getTime();&lt;/p&gt;
&lt;p&gt;・Date&amp;rarr;「エポックからのミリ秒」変換&lt;br /&gt;
　long current = new Date().getTime();　&amp;rarr;1174368381739&lt;/p&gt;
&lt;p&gt;・「エポックからのミリ秒」&amp;rarr;Calendar変換&lt;br /&gt;
　Calendar current = Calendar.getInstance();&lt;br /&gt;
　current.setTimeInMillis(System.currentTimeMillis());　//long型の引数&lt;/p&gt;
&lt;p&gt;・Calendar&amp;rarr;「エポックからのミリ秒」変換&lt;br /&gt;
　long current = Calendar.getInstance().getTimeInMillis();&lt;/p&gt;
&lt;p&gt;■java.util.SimpleDateFormat　日時型を文字列に変換&lt;br /&gt;
　SimpleDateFormat sdf = new SimpleDateFormat(&amp;quot;yyyy/MM/dd HH:mm;ss&amp;quot;);&lt;br /&gt;
　sdf.format(new Date());&lt;br /&gt;
　sdf.format(Calendar.getInstance().getTime());&lt;/p&gt;
&lt;p&gt;■java.sql.Date（java.util.Dateとの違い）&lt;br /&gt;
　//&lt;br /&gt;
　GregorianCalendar gc = new GregorianCalendar(2005,0,1);&lt;br /&gt;
　Date date = gc.getTime();&lt;br /&gt;
　&lt;br /&gt;
　DateFormat df = DateFormat.getInstance();&lt;br /&gt;
　String strDate1 = df.format(date);&lt;br /&gt;
　System.out.println(strDate1);　//&amp;rarr;05/01/01 0:00&lt;br /&gt;
　&lt;br /&gt;
　Date date2 = new Date();&lt;br /&gt;
　gc.setTime(date2);&lt;br /&gt;
　gc.add(Calendar.YEAR, 3);&lt;br /&gt;
　System.out.println(gc.get(Calendar.YEAR) + &amp;quot;/&amp;quot; + (gc.get(Calendar.MONTH) + 1)&lt;br /&gt;
　　+ &amp;quot;/&amp;quot; + gc.get(Calendar.DATE));　//&amp;rarr;2011/11/4&lt;br /&gt;
　&lt;br /&gt;
　//java.sql.Dateはパラメータにlong値を必要とする&lt;br /&gt;
　java.sql.Date date3 = new java.sql.Date(gc.getTimeInMillis());&lt;br /&gt;
　System.out.println(date3);　//&amp;rarr;2011-11-04&lt;br /&gt;
　GregorianCalendar gc2 = new GregorianCalendar();&lt;br /&gt;
　&lt;br /&gt;
　gc2.setTimeInMillis(date3.getTime());&lt;br /&gt;
　gc2.add(Calendar.YEAR, -2);&lt;br /&gt;
　System.out.println(gc2.get(Calendar.YEAR) + &amp;quot;/&amp;quot; + (gc2.get(Calendar.MONTH) + 1)&lt;br /&gt;
　　+ &amp;quot;/&amp;quot; + gc2.get(Calendar.DATE));　//&amp;rarr;2009/11/4&lt;/p&gt;</description> 
      <link>http://manabukun.blog.shinobi.jp/java/java%E3%81%A7%E3%81%AE%E6%99%82%E9%96%93%E3%81%AE%E5%8F%96%E6%89%B1%E3%81%84%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6</link> 
    </item>
    <item>
      <title>Javaのファイル操作</title>
      <description>■ファイルの入出力&lt;br /&gt;
・&lt;font color=&quot;#ff0000&quot;&gt;FileInputStream&lt;/font&gt;(&lt;font color=&quot;#ff0000&quot;&gt;FileOutputStream&lt;/font&gt;)&lt;br /&gt;
　//生のバイト（イメージデータなど）のストリームを読み書き &amp;hArr; 文字ストリーム &lt;font color=&quot;#ff0000&quot;&gt;FileReader&lt;br /&gt;
&lt;/font&gt;・&lt;font color=&quot;#ff0000&quot;&gt;FileReader&lt;/font&gt;(&lt;font color=&quot;#ff0000&quot;&gt;FileWriter&lt;/font&gt;)&lt;br /&gt;
　//文字単位で入出力を行う。&lt;br /&gt;
・&lt;font color=&quot;#ff0000&quot;&gt;InputStreamReader&lt;/font&gt;(&lt;font color=&quot;#ff0000&quot;&gt;OutputStreamWriter&lt;/font&gt;)&lt;br /&gt;
　//バイトストリームから文字ストリームへの橋渡しをする。指定されたcharsetを使用して文字に変換する。&lt;br /&gt;
　変換効率を最高にするには&lt;font color=&quot;#ff0000&quot;&gt;BufferedReader&lt;/font&gt;の内部に&lt;font color=&quot;#ff0000&quot;&gt;InputStreamReader&lt;/font&gt;をラップする事を考慮する必要がある。&lt;br /&gt;
　　&lt;font color=&quot;#ff0000&quot;&gt;BufferedReader &lt;/font&gt;in = &lt;font color=&quot;#0000ff&quot;&gt;new &lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;BufferedReader&lt;/font&gt;(&lt;font color=&quot;#0000ff&quot;&gt;new &lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;InputStreamReader&lt;/font&gt;(&lt;font color=&quot;#ff0000&quot;&gt;System&lt;/font&gt;.in));&lt;br /&gt;
・&lt;font color=&quot;#ff0000&quot;&gt;BufferedReader&lt;/font&gt;(&lt;font color=&quot;#ff0000&quot;&gt;BufferedWriter&lt;/font&gt;)&lt;br /&gt;
　//文字、配列、行をバッファリングすることにより、文字型入力ストリームからテキストを効率よく読み込める。&lt;br /&gt;
・&lt;font color=&quot;#ff0000&quot;&gt;File&lt;/font&gt;(Java.io.File)&lt;br /&gt;
　//ファイルおよびディレクトリのパス名の抽象表現</description> 
      <link>http://manabukun.blog.shinobi.jp/java/java%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%93%8D%E4%BD%9C</link> 
    </item>
    <item>
      <title>引き続きフレームワーク</title>
      <description>引き続き&amp;darr;を参考にお勉強&lt;br /&gt;
&lt;a href=&quot;http://www.fumikichan.net/prog/Servlet/kd030101.jsp&quot;&gt;http://www.fumikichan.net/prog/Servlet/kd030101.jsp&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
構成はこんな感じ。&lt;br /&gt;
[P]UserCheck&lt;br /&gt;
　　+ JREシステム・ライブラリー&lt;br /&gt;
　　+ TOMCAT_HOME/common/../servlet.jar&lt;br /&gt;
　　+ TOMCAT_HOME/common/../jasper-runtime&lt;br /&gt;
　　+ struts.jar&lt;br /&gt;
　　- [D]WEB-INF/src&lt;br /&gt;
　　　　- デフォルトパッケージ&lt;br /&gt;
　　　　　　+ LoginAction.java&lt;br /&gt;
　　　　　　+ LoginForm.java&lt;br /&gt;
　　　　　　+ UserCheckActionMapping.java&lt;br /&gt;
　　　　- ApplicationResources.properties&lt;br /&gt;
　　+ [D] work&lt;br /&gt;
　　- [D] WEB-INF&lt;br /&gt;
　　　　- [D]classes&lt;br /&gt;
　　　　　　+ [D]org&lt;br /&gt;
　　　　　　- ApplicationResources.properties&lt;br /&gt;
　　　　　　- LoginAction.class&lt;br /&gt;
　　　　　　- LoginForm.class&lt;br /&gt;
　　　　　　- UserCheckActionMapping.class&lt;br /&gt;
　　　　- [D] lib&lt;br /&gt;
　　　　　　- xxxx.jar&lt;br /&gt;
　　　　- [D] src&lt;br /&gt;
　　　　　　- ApplicationResources.properties&lt;br /&gt;
　　　　　　- LoginAction.java&lt;br /&gt;
　　　　　　- LoginForm.java&lt;br /&gt;
　　　　　　- UserCheckActionMapping.java&lt;br /&gt;
　　　　- struts-bean.tld&lt;br /&gt;
　　　　- struts-config.xml&lt;br /&gt;
　　　　- struts-html.tld&lt;br /&gt;
　　　　- web.xml&lt;br /&gt;
　　- index.jsp&lt;br /&gt;
　　- login.jsp</description> 
      <link>http://manabukun.blog.shinobi.jp/java/%E5%BC%95%E3%81%8D%E7%B6%9A%E3%81%8D%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF</link> 
    </item>
    <item>
      <title>今日やったこと！</title>
      <description>&lt;p&gt;MySQLの設定とかごちゃごちゃ。&lt;br /&gt;
&lt;br /&gt;
■起動と停止&lt;br /&gt;
&amp;nbsp;C:\&amp;gt; net start MySQL5&lt;br /&gt;
&amp;nbsp;C:\&amp;gt; net stop MySQL5&lt;/p&gt;
&lt;p&gt;■操作&lt;br /&gt;
&amp;nbsp;mysql -u root&lt;br /&gt;
&amp;nbsp;mysql -u root -pxxx &lt;br /&gt;
※パスワード付の場合は-pの後、空白を空けずに入力する。&lt;/p&gt;
&lt;p&gt;・作成済みのDBを見る&lt;br /&gt;
&amp;nbsp;show databases;&lt;/p&gt;
&lt;p&gt;・DBの作成&lt;br /&gt;
&amp;nbsp;create database xxxxx;&lt;/p&gt;
&lt;p&gt;・DBへの接続&lt;br /&gt;
&amp;nbsp;connect xxxx;&lt;br /&gt;
&lt;br /&gt;
・テーブル作成（エラー1064がのきなみ）&lt;br /&gt;
create table USERM (&lt;br /&gt;
ID char(5) NOT NULL primary key,&lt;br /&gt;
USERNAME char(10) NOT NULL,&lt;br /&gt;
PASS char(10) NOT NULL&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
JDBCドライバインストール　web.xmlの修正&lt;br /&gt;
===============================&lt;br /&gt;
セッション固定攻撃の脆弱性について対応策&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;/p&gt;</description> 
      <link>http://manabukun.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/%E4%BB%8A%E6%97%A5%E3%82%84%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8%EF%BC%81</link> 
    </item>

  </channel>
</rss>