2012年4月20日金曜日

インポートされた javax.servlet.http は見つかりません

以前作成したWebアプリを修正しようとして、久しぶりに
Eclipseに読み込んだ。

すると Eclipse がエラーを訴えている。


インポートされた javax.servlet.http は見つかりません

javax.servlet.http の 外部JARファイルの追加は
何をどうしたらよいのか さっぱりわからない。 



ビルドパスの構成



【ビルドパスの構成】 画面をよ~っく見ると、TOMCAT_HOME
の記述がおかしい(Eclipseのバージョンが違っている!)。

これは、小生がEclipseを再インストールしているが、その名残
のようだ。

TOMECAT_HOMEの設定を現在のものに書き換えたら、
エラーが解消された。





情報処理再チャレンジブログ ホーム

2012年4月19日木曜日

Eclipse エラー 解消

「http://java.sun.com/jsp/jstl/core は web.xmlとこのアプリケーションを配備したJARファイルのどちらかでも解決できません」


Eclipseのコンソールに何やら意味不明のメッセージが表示され
思い通りの結果が表示されない。

ググってみると、 jstl.jar と standard.jarの二つのファイルを
EclipseのWeb-INF/lib 内にコピーしなければならないらしい。
※バージョン1.1 以上

ここから、
http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

 jakarta-taglibs-standard-1.1.2.zip をクリックすると
 
2つのファイルをダウンロードできます。 

Eclipseのパッケージエクスプローラー内のWeb-INF/lib に
コピーしてトムキャットを再起動すると解決!!
 
 のんきの日記(http://nonki.yoka-yoka.jp/e121918.html)
さんで勉強させてもらいました。


情報処理 再チャレンジブログ ホーム


2012年3月23日金曜日

やり直し JAVAサーブレット(基礎からのサーブレット/JSP [改訂版] )その10

(p148) サーブレットフィルタとは

サーブレットやJSP、また、同一Webアプリケーション内で
あればHTML等に共通の前後処理を記述できる仕組み。
たとえば、入力文字エンコーディング。

テキストで javaクラスの配置場所を示している。
これはちと解かりづらいが、Eclipseで開発を行う場合任意の
プロジェクト内にfilterパッケージを作成しその中に記述する
と言うことだろうか。

1.javax.servlet.Filter インターフェイス を実装したフィルタクラスを作成する。
2. web.xmlにフィルタを登録する。



















情報処理 再チャレンジ ブログ ホーム へ

2012年3月22日木曜日

やり直し JAVAサーブレット(基礎からのサーブレット/JSP [改訂版] )その9


(p140) 入力チェックを行う

その8ではエラーチェックの無い干支計算プログラムを示したが、
全角で西暦を入力した場合などは、例外が発生してしまう。

テキストでは半角数値以外の文字列が入力された場合に、
エラー処理を行うプログラムが紹介されている。


eto2.jsp

<%@page contentType="text/html; charset=Windows-31J"%>
<html>
<body>
<h2>干支計算
(入力チェック付)</h2>
生まれた年を入力してください。

<form action="../input/EtoServlet2">
    西暦<input type="text" name="year">年 
<%-- *1 --%>
    <input type="submit" value="計算"> <%-- *2 --%>
</form>
</body>
</html>


 <%-- *1 入力された文字列を、変数名 "year" で管理 --%>
 <%-- *2 value属性でボタンに表示する文字列を設定 --%>




EtoServlet2.java

package chapter10;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.*;
import javax.servlet.http.*;

public class EtoServlet2 extends HttpServlet {

    final static String[ ] ETOS = new String[ ]  {

       "子(ね)", "丑(うし)", "寅(とら)",
            "卯(う)", "辰(たつ)", "巳(み)", 

       "午(うま)", "未(ひつじ)", "申(さる)", 
     "酉(とり)", "戌(いぬ)", "亥(い)",    };

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

        String yearStr = request.getParameter("year");

        String error = null;       // エラーメッセージを管理する参照変数(error)をnullで初期化
        String etoText = null;     //  計算結果(干支)を管理する参照変数(etoText)をnullで初期化

        if (yearStr == null || yearStr.length() == 0) {     //  文字列が入力されたかをチェック
            error = "何か入れてね";           
        }

        if (error == null) {   // 文字が入力された場合
            try {
                int year = Integer.parseInt(yearStr);   //  文字列を数値に変換
                if (year < 0) {                  //
                    error = "紀元前の人はサポート外です";
                } else {
                    int index = (year + 8) % 12;
                    etoText = ETOS[index];
                }
            } catch (NumberFormatException e) {
                error = "年を入れてください";
            }

            response.setContentType("text/plain; charset=Windows-31J");
            PrintWriter out = response.getWriter();

            if (error != null) {
                out.println(error);
            } else {
                out.println("あなたの干支:" + etoText);
            }
        }
    }
}





情報処理 再チャレンジ ブログ ホーム へ

2012年3月21日水曜日

やり直し JAVAサーブレット(基礎からのサーブレット/JSP [改訂版] )その8

(p136) 入力チェックと値の変換

サーブレットに渡される入力パラメータは文字列である。
それでサーブレットよっては数値・日付等への型変換が必要になる。
また、正しい値が送られてきているかチェックをする必要がある。

ブラウザ(.jsp)から西暦で4桁の年を入力すると、干支を返すサーブレット(.java)
が紹介されている。

まずは、入力チェックのないプログラム。


eto.jsp
<%@page contentType="text/html; charset=Windows-31J"%>
<html>
<body>
<h2>干支計算</h2>
生まれた年を入力してください。

<form action="../input/EtoServlet">
    西暦<input type="text" name="year">年 
<%-- *1 --%>
    <input type="submit" value="計算"> <%-- *2 --%>
</form>
</body>
</html>


 <%-- *1 入力された文字列を、変数名 "year" で管理 --%>
 <%-- *2 value属性でボタンに表示する文字列を設定 --%>




EtoServlet.java

package chapter10;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.*;
import javax.servlet.http.*;

public class EtoServlet extends HttpServlet {



    final static String[] ETOS = new String[] { /* *1 */ 

        "子(ね)","丑(うし)","寅(とら)",
        "卯(う)","辰(たつ)","巳(み)",
        "午(うま)","未(ひつじ)","申(さる)",
        "酉(とり)","戌(いぬ)","亥(い)",
        };


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

        String yearStr = request.getParameter("year"); 
/* *2 */
        int year = Integer.parseInt(yearStr); /* *3 */

        int index = (year + 8) % 12; 
/* *4 */
        String etoText = ETOS[index];

        response.setContentType("text/plain; charset=Windows-31J");
        PrintWriter out = response.getWriter();

        out.println("あなたの干支:" + etoText);
    }
}



/* *1 String 型のオブジェクトの入れ物をメモリ上に確保し、そこに入る
オブジェクトを定数として管理する為の、ETOS[ ] 配列を宣言している。 */

/* *2  オブジェクト変数( request )が指し示すメモリ上のオブジェクトに格納
されている値を、オブジェクトが持つ getParameter()メソッドで取り出し、
それを String 型のオブジェクトとして改めてメモリ上に生成し、
  オブジェクト変数(yearStr) で記憶させている。  */


/* *3  なぜ8を足しているのかわからない。定石なのだろうか? */






情報処理 再チャレンジ ブログ ホーム へ

2012年3月20日火曜日

tomcat7 tomcat6 での文字化け対処

基礎からのサーブレット/JSP [改訂版] で
サーブレットの学習をしてきたが、
どうしても日本語の文字化けを解消できない。
いろいろ調べてみると、server . xml の 
<Connector> 内に


useBodyEncodingForURI="true" を
 
記述すると良いらしい。
 
 
 上の写真は tomcat6 の server.xml に追記ものです。 
 
記述後、tomcat を再起動したら、
 
日本語が文字化けせずに表示されました。 
で勉強させて頂きました。 
 
  


情報処理再チャレンジブログ ホーム





2012年3月18日日曜日

はじめてのJSP&サーブレットプログラミング[第5版] 覚書 その1

(p155) 
クラスメソッドという特殊なメソッドのみで作られるクラスは、オブジェクトを作らなくても利用できます。main()メソッドもクラスメソッドであり、JavaVMから呼び出されています。

(p158)
クラスの定義を行うと、同時にクラス名と同じ名前のデータ型が作られる。
boolean , char , int , double などのように、定義したクラス名 型  の変数(参照変数)を宣言できる。

(p158)
Car carObj = new Car() ; 
参照変数(carObj) と ”=” を組み合わせて場合、 ”=” は代入ではない。
オブジェクトを carObj に入れる事はできない。

new Car() で生成した、メモリー上に存在する オブジェクト を
参照変数(carObj)に 『参照させる』 = オブジェクトの場所を確認させている。そして、
その場所を覚えさせている。


オブジェクトの場所を覚えた ”carObj” を [ carObj . speed = 0 ; ] のように使うと、
carObj が覚えている オブジェクト が持つ、speed と言う変数に ”0” を設定できる。






情報処理 再チャレンジ ブログ ホーム へ