Today: Yesterday: Total: Online:
カテゴリー
その他
  • RSS1.0
  • RSS2.0
  • atom0.3
  • valid XHTML1.0
  • valid CSS2
  • Credit
RSSリーダーで購読する | この日記のはてなブックマーク数 | プロフィール
コメントが一番多い記事(233コメント):人の心理の裏をかくホームページ集客術:リピータになってもらうためには
ツイートが一番多い記事(94ツイート):ちょっと待て!twitterやfacebookに子供の写真を掲載する親達への警告
いいねが一番多い記事(574いいね):facebookスパムに要注意。なりすましの見分け方とアカウント乗っ取りの手口(2013年度版)

[ カテゴリー » JAVA » JSP ]

カテゴリー » JAVA » JSP November 25, 2010

JSPのinclude(JSPで他のJSPを読み込ませる) ID:1290678438


方法1
<%@ include file="ex11_5_1-i.jsp" %>

方法2
<jsp:include page="別の.jsp" flush="true" />


方法1は、インクルードしたJSPの修正を変更するには
インクルード元を変更する必要がある。


方法2は、すぐに反映されるが
外部ファイル内で、参照元ファイル(includeディレクティブが記載されたファイル)で宣言された変数、メソッドを参照できない。

方法1は、参照できる。


http://iihito.dip.jp/docs/java/no11/jsp-5.html

— posted by midilin @ 06:47PM

カテゴリー » JAVA » JSP November 10, 2010

JSP url パラメータ クエリ情報を取得する: ID:1289352554


getQueryString()を使う。

]
public class SampleServlet extends HttpServlet {

  public void doGet( HttpServletRequest request, HttpServletResponse response )
      throws ServletException,IOException {

    response.setContentType("text/html;charset=Windows-31J");

    PrintWriter out = response.getWriter();
    String query = request.getQueryString();
    out.println("QueryString=" + query.replaceAll("&", "&"));

   }
}
http://struts.wasureppoi.com/servlet/06_getQueryString.html

— posted by midilin @ 10:29AM

カテゴリー » JAVA » JSP November 02, 2010

JSPでDBアクセス(データベースアクセス) ID:1288679917


・JSPから直接データベースにアクセスすることはできない
・データベースにアクセスを行うオリジナルクラスまたはBeanを作成し、
 それをJSP側から使用することで間接的にデータベースにアクセスする。

例)

MyDBAccess.java 

 import java.sql.*;
 
 public class MyDBAccess {
 
     private String driver;
     private String url;
     private String user;
     private String password;
     private Connection connection;
     private Statement statement;
     private ResultSet resultset;
 
     /**
      * コンストラクタ
      * @param driver ドライバー
      * @param url URL
      * @param user ユーザー名
      * @param password パスワード
      */
     public MyDBAccess(String driver, String 
url, String user, String password) {
         this.driver = 
driver;
         this.url = url;
         this.user = user;
         this.password 
= password;
     }
 
     /**
      * 引数なしのコンストラクタ
      * 既定値を使用する
      */
     public MyDBAccess() {
         driver = "org.postgresql.Driver";
         url = "jdbc:postgresql://localhost:5432/jspdb";
         user = "postgres";
         password = "";
     }
 
     /**
      * データベースへの接続を行う
      */
     public synchronized void open() throws 
Exception {
         Class.forName(driver);
         connection = DriverManager.getConnection(url, 
user, password);
         statement = connection.createStatement();
     }
 
     /**
      * SQL 文を実行した結果の ResultSet を返す
      * @param sql SQL 文
      */
     public ResultSet getResultSet(String sql) 
throws Exception {
         if ( statement.execute(sql) 
) {
             
return statement.getResultSet();
         }
         return null;
     }
 
     /**
      * SQL 文の実行
      * @param sql SQL 文
      */
     public void execute(String sql) throws 
Exception {
         statement.execute(sql);
     }
 
     /**
      * データベースへのコネクションのクローズ
      */
     public synchronized void close() throws 
Exception {
         if ( resultset 
!= null ) resultset.close();
         if ( statement 
!= null ) statement.close();
         if ( connection 
!= null ) connection.close();
     }
}

JSP側
<%@ page import="java.sql.*, atmarkit.MyDBAccess"
     contentType="text/html; charset=euc-jp" 
%>
 <%
 // 内容: データベースにアクセスする
 
 // MyDBAccess のインスタンスを生成する
 MyDBAccess db = new MyDBAccess();
 
 // データベースへのアクセス
db.open();
 
// メンバーを取得
ResultSet rs = db.getResultSet("select * from member");
 
// メンバー一覧表示用のテーブル
String tableHTML = "<table border=1>";
tableHTML += "<tr bgcolor=\"000080\"><td><font color=\"white\">メンバーID</font></td>"
     + "<td><font color=\"white\">名前</font></td>"
     + "<td><font color=\"white\">カナ</font></td>";
 
// 取得された各結果に対しての処理
while(rs.next()) {
 
     int id = rs.getInt("member_id"); // メンバーIDを取得
     String name = rs.getString("name"); // 
メンバー名を取得
     String kana = rs.getString("kana"); // 
メンバー名(カナ)を取得
 
     // 文字コードを EUC_JP からUnicode へ変換
     name = new String(name.getBytes("8859_1"), 
"EUC_JP");
     kana = new String(kana.getBytes("8859_1"), 
"EUC_JP");
 
     // テーブル用HTMLを作成
     tableHTML += "<tr><td align=\"right\">" 
+ id + "</td>"
               
+ "<td>" + name + "</td><td>" + kana + "</td></tr>";
}
 
tableHTML += "</table>";
 
// データベースへのコネクションを閉じる
db.close();
 
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>データベースへのアクセス</title></head>
<body>
<p>-- データベースへのアクセス --</p>
<p>
<b>メンバーの一覧</b><br>
<%= tableHTML %>
</p>
</body>
</html>
http://www.atmarkit.co.jp/fjava/rensai/jsp10/jsp10.html

— posted by midilin @ 03:38PM

カテゴリー » JAVA » JSP November 02, 2010

JSPでのリダイレクト方法 ID:1288678093


jsp:forwardを使う。
<jsp:forward page="9-1-mobile.jsp" /><%

尚、forwardアクションによる転送では転送元と転送先で、
sessionオブジェクト、requestオブジェクトが共有される。

よって、下記のような形でエラーページを出力するときに
値を渡せる

・リクエストオブジェクトによる転送例

転送元
// エラーメッセージが設定されている場合はエラーページへ転送
if(!errorMessage.equals("")) {
    request.setAttribute("errorMessage", errorMessage);
    %><%
} 

転送先
String errorMessage = (String)request.getAttribute("errorMessage");

・セッションオブジェクトによる転送例

転送元
<jsp:forward page="転送先ローカルURL"/>
    <jsp:param name="パラメータ名A" value="パラメータ値A"/>
    <jsp:param name="パラメータ名B" value="パラメータ値B"/>
</jsp:forward>


転送先
request.getParameter("パラメータ名A");

http://www.atmarkit.co.jp/fjava/rensai/jsp09/jsp09.html

— posted by midilin @ 03:08PM

カテゴリー » JAVA » JSP November 02, 2010

JSP クッキーの設定 ID:1288677818


・クッキーの設定
// クッキーに格納する文字列を作成(URLエンコードをする)
String value = URLEncoder.encode(now.toString());

// 名前が"accesstime"、値が現在時刻であるクッキーを作成
Cookie cookie = new Cookie("accesstime",value);

// クッキーの設定
cookie.setMaxAge(7 * 24 * 60 * 60); //有効期間を1週間に設定

// クッキーを発行
response.addCookie(cookie);

・クッキーの取得

// それぞれのクッキーに対して名前を確認
if(cookies != null) {
    for(int i = 0; i < cookies.length; i++) {
        // 名前が "accesstime" であるかチェック
        if(cookies[i].getName().equals("accesstime")) {
            // 該当するクッキーを取得
            accesstimeCookie = cookies[i];
        }
    }
}

// 表示する文字列
String accesstime;

// 該当するクッキーがみつからなかった場合
if(accesstimeCookie == null) {
    accesstime = "記録がありません";
} else { // クッキーがみつかった場合は値を取得(URLデコードする)
    accesstime = URLDecoder.decode(accesstimeCookie.getValue());
}

・クッキーの破棄

既存のクッキーを有効期間がゼロ秒のクッキーに変更することで、ブラウザ側で破棄の処理を行う
// クッキーを作成
Cookie cookie = new Cookie("accesstime","");

// クッキーの有効期間を0秒に設定
cookie.setMaxAge(0);

// クッキーを発行
response.addCookie(cookie);

http://www.atmarkit.co.jp/fjava/rensai/jsp08/jsp08.html

— posted by midilin @ 03:03PM

カテゴリー » JAVA » JSP November 02, 2010

JSPのセッション ID:1288676708


・通常は1ページ1セッション。
・複数のページを1セッションで扱いたい場合(ショッピングサイトなど)
 HTTPの範囲では、扱うことができないため、JSPではクッキーを使用して複数ページにわたるセッションを管理する仕組みが準備されている。

例)
・セッション変数にユーザー名が格納されていればメッセージ表示+7-3.jspへのリンク
・ユーザー名が格納されていなければ、入力用のフォームを表示し、値を7-2.jspを渡す

<%@ page contentType="text/html; charset=euc-jp" %>
<%
// 内容: セッションを使用する
 
// セッション変数の取得
String userName = (String)session.getAttribute("name");
 
// 表示するメッセージ
String message = "";
 
if(userName == null) { // セッション変数 name を取得できなかった場合
     message = "お名前を入力してください。<br>"
             + "<form action=\"7-2.jsp\">"
             + "<input type=\"text\" name=\"name\" size=16> "
             + "<input type=\"submit\" value=\"OK\">";
 
} else { // セッション変数 name を取得できた場合
     message = "ようこそ <b>" + userName + "</b> さん。<br><br>"
             + "<a href=\"7-3.jsp\">セッションを終了する</a>";
}
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>セッションを使用する</title></head>
<body>
<p>-- セッション変数の取得 --</p>
<p><%= message %></p>
<p>(sessionID=<%= session.getId() %>)</p>
</body>
</html>

セッションのの識別IDはgetId()メソッドで取得できる。


セッション変数の格納は
session.setAttribute("name", name);


セッションの開放は
session.invalidate();

sessionは、outと同じ暗黙オブジェクトの1つ

http://www.atmarkit.co.jp/fjava/rensai/jsp07/jsp07.html

— posted by midilin @ 02:45PM

カテゴリー » JAVA » JSP November 02, 2010

Jsp Bean サンプルプログラム ID:1288675628


・BeanであるクラスとBeanでないクラスの違い

Beanにはプロパティの値を設定するメソッドと
プロパティの値を取得するメソッドの名前に決まり事がある。

基本的には、setとgetの後にプロパティ名を続けたメソッドを準備すればよいだけ。



CopyrightHTMLBean.java

package atmarkit;
 
 /**
  * 著作権表示用のHTMLを生成するBean
  */
 public class CopyrightHTMLBean {
 
     /** 著作年 */
     private String year = "";・・・・・・・・private変数になった
     public void setYear(String year) { this.year 
= year; }
 
     /** 著作者 */
     private String name = "";・・・・・・・・private変数になった
     public void setName(String name) { this.name 
= name; }
 
     /** メールアドレス */
     private String mail = "";・・・・・・・・private変数になった
     public void setMail(String mail) { this.mail 
= mail; }
 
     /**
      * 標準的な著作権表示HTML文を取得する
      * @return 標準的な著作権表示HTML文
      */
     public String getNormalHTML() {
         // メールアドレスが指定されている場合は著作者名にリンクをつける
         if(!mail.equals("")) 
{
             
name = " <a href=\"mailto:" + mail + "\">" + name + "</a>";
         }
         return "Copyright 
" + year + " " + name + ". All rights reserved.";
     }
 
     /**
      * 短い著作権表示HTML文を取得する
      * @return 短い著作権表示HTML文
      */
     public String getShortHTML() {
         // メールアドレスが指定されている場合は著作者名にリンクをつける
         if(!mail.equals("")) 
{
             
name = " <a href=\"mailto:" + mail + "\">" + name + "</a>";
         }
         return "(C) " 
+ year + " " + name + ".";
     }
 }

JSP側

<%@ page contentType="text/html; charset=euc-jp" %>
 <jsp:useBean id="copyright" class="atmarkit.CopyrightHTMLBean" 
/>
 <jsp:setProperty name="copyright" property="year" value="2001" 
/>
 <jsp:setProperty name="copyright" property="mail" value="taro@java.server.pages" 
/>
 <jsp:setProperty name="copyright" property="name" value="JSP 
太郎" />
 <%
 // オリジナルBeanを使用する
 %>
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
nbsp;    <title>オリジナルBeanを使用する</title>
</head>
<body>
<p>-- オリジナルBeanを使用する --</p>
<p>
<hr>
標準的な著作権表示<br>
<jsp:getProperty name="copyright" property="normalHTML" />
<hr>
短い著作権表示<br>
<jsp:getProperty name="copyright" property="shortHTML" />
<hr>
</p>
</body>
</html>

●<jsp:useBean>
Beanの使用を宣言

<jsp:useBean id="copyright" 
            class="atmarkit.CopyrightHTMLBean" />
            

atmarkit.CopyrightHTMLBean copyright = new atmarkit.CopyrightHTMLBean();
と同じような意味


●<jsp:setProperty>
Beanのプロパティの値を設定

<jsp:setProperty name="copyright" 
            property="year" value="2001" />

copyright.setYear("2001");
と同じ意味

●<jsp:getProperty>
Beanのプロパティの値を取得

<jsp:getProperty name="copyright" 
            property="shortHTML" />

copyright.getShortHTML(); と同じような意味

http://www.atmarkit.co.jp/fjava/rensai/jsp06/jsp06.html

— posted by midilin @ 02:27PM

カテゴリー » JAVA » JSP November 02, 2010

Beanのスコープ ID:1288675259


<jsp:useBean id="id_name" 
            class="class_name" scope="scope" 
            /> 

scopeの値は、page、request、session、applicationの4通
デフォルトでpageが使用

scopeは、一度宣言されたBeanにアクセスできる有効範囲

・page
現在のページのみ

・request
現在のリクエストの範囲(インクルードされたページ、転送先のページを含む)
レスポンスがユーザーに返されるまでの間だけ有効
(使用例:FORMで入力されたデータを保持させる)

・session
現在のセッションの範囲
(使用例:ログインしたユーザーの情報を保持させる)

・application
アプリケーションの有効期間と同じだけ、永続的に使用
(使用例:アクセスカウントなど、アプリケーション間で共有する情報を保持させる

http://www.atmarkit.co.jp/fjava/rensai/jsp06/jsp06.html

— posted by midilin @ 02:20PM

カテゴリー » JAVA » JSP November 02, 2010

JSPのインクルード方法 ID:1288672805


静的なインクルードを行う「インクルードディレクティブ」
<% out.print("Hello,
"); %>

<%@ include file="include.jsp"%>

インクルードディレクティブは、コンパイル前に読み込み処理を行う。
(ファイルを変更して、更新してもすぐに反映されない)

動的なインクルードを行う「インクルードアクション」
<% out.print("Hello,
"); %>

<jsp:include page="include.jsp" flush="true"
/>

インクルードアクションは実行時に読み込み処理を行う。
(ファイルを変更して、更新してもすぐに反映される)

http://www.atmarkit.co.jp/fjava/rensai/jsp05/jsp05.html

— posted by midilin @ 01:40PM

カテゴリー » JAVA » JSP November 02, 2010

JSP web.xml classesディレクトリ libディレクトリ ID:1288671860


JSPではWebアプリケーションのディレクトリ構成が次のように決められている。

$docBase - WEB-INF - classes - myPackageName-myClass.class
|- lib - myLib.jar
- web.xml

$docBaseは、Context Pathの宣言で指定したdocBaseのパス
その下に、WEB-INFというディレクトリが存在し、
その中に、classesとlibディレクトリ、およびweb.xmlファイルを配置


classesディレクトリには、オリジナルのクラスを配置することで、JSPからそのクラスを使用することができる

lib以下に置いたクラスは、Tomcat起動時にクラスパスに追加される。
Webアプリケーションで使用するJAR形式のアーカイブを配置する。

web.xml には、サーブレットの登録や初期値の設定を行う。
デフォルト値でよい


JSPファイル、HTMLファイルは、$docBase以下の任意の場所に配置する




http://www.atmarkit.co.jp/fjava/rensai/jsp04/jsp04.html

— posted by midilin @ 01:24PM