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