2010年12月24日金曜日

Ubuntuサーバで文字化け解決

フィルターで文字コードの設定を変更、

Tomcatの所で文字コードの変更を行えない設定だったので
userSetの変更を行う、

また、SQLのドライバーが内と怒られる、
調べてみると、WEBINFのlibにドライバーを置いていなかったのが分かる、

2010年12月23日木曜日

Mysqlのテーブル名が小文字になる、

Mysqlでは
CREATE TABLE `COMPANY` (
とsqlを実行してもcompanyとなってしまう。

これを変更するには
my.iniファイルの[mysqld]の項目に
lower_case_table_names=0を追加して保存、
Mysqlを再起動で解決!!

2010年12月14日火曜日

Java Dao・Dto・Beanの役割分担のマトメ

Controlクラス{
①request.getParameterのパラメータによって処理の切り替え、
②Daoを生成し、必要なDaoメソッドの実行、
③DaoからListオブジェクトがリターンされるのでセッションやrequestに格納
④ディスパーチ

Daoクラス{
①DBクラスのコネクションとステートメントメソッドの呼び出し、
②Sql文の作成、
③Sql文の実行、
④ループでリザルトの一行ずつの結果をDtoの必要メソッドで実行、
⑤ループ毎でDtoからリターンされるBeanオブジェクトをList.add(Bean)
⑥Listを呼び出し元のControlクラスにリターン


Dto{
①Daoで一行毎のレコードが渡ってくるので、
②一行毎のBeanオブジェクトを生成
②Beans.setId(リザルト.getInt("ID"));
③一行毎のBeansオブジェクトを呼び出し元のDaoにリターン


Beansクラス{
set・getメソッドを記述



2010年12月9日木曜日

UbuntuのMysql外部アクセス設定

①Ubuntuのmysqlポートの解放、
②外部からの接続をOKにする
sudo vim /etc/mysql/my.cnで
を#bind-address       = 127.0.0.1 ←コメントアウト 
③$>sudo /etc/init.d/mysql restart ←再起動
④ mysql>grant all privileges on *.*
to ●●●●@"%" identified "●●●●"  with grant option;
↑↑↑↑↑↑↑↑ 1番がユーザ名2番目がパスワード↑↑↑↑↑↑
⑤mysql>flush privileges;←設定反映 
⑥ sudo /etc/init.d/mysql restart←再起動
 
これで外部からMySqlが使えるはずです。
 
  

Java・DTO・DAO・Beansを自分的にマトメ

★★★★処理内容★★★★★
JspよりIDとパスが入力されるのでIDとパスが正しいのか返す、
★★★★処理の流れ★★★★
①IDとパス入力
②コントロールクラスが値を受け取り、
③Beanクラスを呼び出す
④BeanクラスはIDを受け取り、DaoにIDを渡す、この時の戻り型はDto
⑤DaoクラスはSelect文でIDに紐づく値を実行
⑤DaoはDtoクラスを呼び出しSelect文の値をDtoのフィールドにセット
⑥BeanはDto型で戻ってきた値を、Dtoのgetメソッドを使いBeanのsetメソッドでセット、
⑦Beanに格納されたパスを入力されたパスが同じか調べて結果を返す
⑧jspにディスパーチ

こんな感じかな、
わたしは説明へたですが 、

下記の本はUMLの書き方やオブジェクトなど丁寧で分かりやすく、
2度ほど読むとオブジェクト指向やUMLの感じがつかめるを思います。

*追伸・UML等を勉強中です。

2010年12月7日火曜日

Java セッションのお勉強

■javax.servlet.http.HttpServletRequest.getRequestURI()
本来アクセスしようとしたURLを取得
 
■/Cus/で始まる全てのURLにマッチします。*で 
<filter>
    <filter-name>AuthFilter</filter-name>
    <filter-class>AuthFilter1</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>AuthFilter</filter-name>
    <url-pattern>/Cus/*</url-pattern>
★.jspや*.cgiと記述すれば指定したファイルにフィルターが掛かります 
★複数のフィルタがマッチした場合にはどうなるでしょうか。
その場合にはマッチしたフィルタ全てが起動されます。起動される順番は、
設定の順番が有線

2010年12月3日金曜日

PlayFrameworkをGoogleAppEnginにアップロード

/appengine-java-sdk-1.4.0/bin/appcfg.cmd update test-gae.warのコマンドでアップ、

今度はLinuxの環境でPlayを挑戦してみようとおもいます

追伸 OPENJAVA環境のGCJ変更につまずいています。

2010年11月17日水曜日

1台のPCにfedora11を2つインストール デュアルブート

1台のPCにfedora11を2つインストールに成功、

http://www.linuxmania.jp/linux_multiboot.htmlを参考におこないました。

2010年11月9日火曜日

UbuntuのCVSを調査

UbuntuのCVSを調査する機会がありましたのでちょっとメモってみます。

Concurrent Versions System(コンカレント・バージョンズ・システム)の事を
CVSと言うそうです。

■特徴として
サーバ上のファイルと自分の持っているファイルの差分のみを転送するだけで最新版を手にいれることが出来る、

■用語
①リポジトリとは
サーバにプログラムを溜めておく場所、
リポジトリから自分のローカルPCにソースを落として作業すると言えば分かりやすいかな

②コミットとは?
リポジトリに作業の終わったソースをアップする事をコミットといいます。
つまりリポジトリに差分情報をアップデートする。

③チェックアウトとは?
リポジトリから初めてソースを自分のローカルPCに取り出す事をチェックアウトという

④アップデートとは?
他のだれかよりリポジトリが更新され、そのリポジトリソースを取り出し最新版に保つ事をアップデートと言う、

⑤ロック方式とは?
他のだれかがリポジトリからソースを取り出し編集作業を行っている時、その他の人は
そのソースを編集できないようにすることをロック方式

⑥コピー・マージ方式
編集完了後に変更した部分をシステム側に反映させる事をマージ、
その他の人も編集作業はできるが、編集箇所の競合が起きた時はマージする時点で解決するか、
一般的には、変更内容が競合する旨をユーザーに知らせ、内容を確認、修正させるの方法がとられることが多い。

⑦バージョン(リビジョン)番号

編集ファイルのバージョンの番号の事、
バージョン番号だけでなく、日付、時刻によってファイルをチェックアウトすることも可能になる。

2010年11月8日月曜日

GoogleMap 経由地6つとスタートとゴールを最短で結ぶプログラムのマトメ

■この部分にデフォルトのセンター位置やMapのタイプを記述 
var myOptions = {
      zoom: 13,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      center: starts
    }
■myoptionを渡します
map = new google.maps.Map(document.getElementById("HTMLに表示するタグ"), myOptions);

■線を引きたい点と点を記述
             var flightPlanCoordinates = [
                 new google.maps.LatLng(36.63615817578634,137.18512058258057),  //富山空港周辺
                 new google.maps.LatLng(36.64442262062068,137.18276023864746)];

■new google.maps.Polylineのpathに上記のflightPlanCoordinatesを渡す
            var flightPath = new google.maps.Polyline({
              path: flightPlanCoordinates,
fillColor: '#ff0000'})
■ 線を描くMapを渡す
flightPath.setMap(map);

■ランドマークを記述
            var stations = [
              ['富山総合公園', 36.638833,137.1981248],
              ['富山郵便局', 36.669182,137.234817],

■ランドマークをjQuery.eachでループ
            jQuery.each(stations, function()
            {
                var latlng = new google.maps.LatLng(this[1], this[2]);

■経由地を代入

     routes1 = document.getElementById("route1").value;//経由地1
     routes2 = document.getElementById("route2").value;//経由地2
     routes3 = document.getElementById("route3").value;//経由地3

■上記の経由地をwaypointに渡す
          waypoints: [
                      {
                      location:routes1, //経由地変数1
                      stopover:false
                      },{
                      location:routes2,//経由地変数2
                      stopover:false
                      },{
                      location:routes3,
                      stopover:false
                      }],

■上記の経由地等をdirectionsService.routeに渡す


            directionsService.route(request, function(result, status)
            {
                SetPolyline(result.routes[0].overview_path);

■ここでスタート地から経由地・ゴールまでの線を引きます
function SetPolyline(routePath)


Google App Engine を無料で使ってみた

googleアカウントは持っていたので、

というか、googleBlog書いてるから当たり前かですね、

http://code.google.com/intl/ja/appengine/
からGoogle App Engineの登録を行う、

http://code.google.com/intl/ja/appengine/docs/java/gettingstarted/
スタート ガイド: Javaがあるので、
それをみて、「Hello」を表示してみた、

ここまでは順調、eclipseのプラグインもあるのでたすかります。
■下記のようなソースを記述し、サーバにアップすると
googleアカウントのログインを呼び出し、user.getNickname()の部分で
アカウント名を呼び出す事が出来ます。
「Hello, ●●●●●●」
のように!!

package guest1;
import java.io.IOException;
import javax.servlet.http.*;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;

@SuppressWarnings("serial")
public class Guest1Servlet  extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws IOException {
        UserService userService = UserServiceFactory.getUserService();
        User user = userService.getCurrentUser();

        if (user != null) {
            resp.setContentType("text/plain");
            resp.getWriter().println("Hello, " + user.getNickname());
        } else {
            resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
        }
    }
}


2010年11月5日金曜日

GoogleMap 円を書く

 new google.maps.Circle({
center: new google.maps.LatLng(lat, lng),
  fillColor: '#ff0000',   // 塗りつぶし色
  fillOpacity: 0.1,       // 塗りつぶし透過度(0: 透明 ⇔ 1:不透明)
map:mapObj,
  radius: 5000,
  strokeColor: '#ff0000', // 外周色
  strokeOpacity: 1,       // 外周透過度(0: 透明 ⇔ 1:不透明)
  strokeWeight: 1         // 外周太さ(ピクセル)
 });

ジオコーディング

ジオコーディングとは、住所を地理的な座標に変換する処理のことで、あなたはマーカーの配置や地図の表示に利用することができます。
(例えば"東京都千代田区永田町1-7-1"は、緯度:35.6758907, 経度:139.7448603となります)





http://sites.google.com/site/gmapsapi3/Home/services#Waypoints


に詳しく説明がある見たいです。

2010年11月4日木曜日

GoogleMapAPIを導入

まずは、手始めに
 
<html>
  <head>
    <title>Hello world in Google Maps API version3</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <script type="text/javascript"
      src="http://maps.google.com/maps/api/js?sensor=false"></script>
    <script type="text/javascript">
      function initialize() {
        var centerPos = new google.maps.LatLng(35.658613, 139.745525);
        var mapOptions = {
          zoom : 18,
          center : centerPos,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
      }
    </script>
  </head>
  <body onload="initialize()">
    <div id="map_canvas" style="width:100%;height:100%"></div>
  </body>
</html>
解説 
■上記の値をセンタにする 
var centerPos = new google.maps.LatLng(35.658613, 139.745525);
 ■オプション指定
 var mapOptions = {

          mapTypeControl : true,//表示タイプ
          scaleControl : true,//距離表示
          navigationControl :  true//+ーのズーム表示
disableDefaultUI : true,//デフォルトの指定を無効

2010年10月5日火曜日

Windows TOMCAT6 + MySql + eclipse 環境でデータソース

 ■前準備
①C:\Tomcat 6.0\libにmysql-connector-java-5.1.13-bin.jarをコピー
②eclipseの各プロジェクトからプロパティ⇒Javaビルドパス⇒外部JARの追加⇒mysql-connector-java-5.1.13-bin.jarを選択し追加⇒OK

■C:\Tomcat 6.0\conf\Catalina\localhost\Test.xmlのTest.xmlに下記のxmlを追加、
私の環境だとeclipseでプロジェクトを作った際、自動でファイルが出来ていますので
そこに追加
<Context path="/Test" reloadable="true" docBase="C:\eclipse\workspace\Test" workDir="C:\eclipse\workspace\Test\work" >//ここは各自違います!!
    <Resource name="jdbc/tests"//データソース名
       auth="Container"
        type="javax.sql.DataSource"
        username=""//sqlのユーザ名
        password=""//sqlのパスワード名
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/test"//mysqlのURLとデータベースを記述、今回はtestデータベースを選択、
    />
</Context>

■Jspソースの記述、今回はeclipseのTestプロジェクトのデフォルトパッケージにjspを置いています。
<%@ page contentType="text/html; charset=Windows-31J"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/tests");//ここはxmlのResource nameと合わせて記述

%>
<% System.out.print(ds); %>//デバック用
<%
Connection conn= ds.getConnection();
Statement pstmt = conn.createStatement();
String sql = "SELECT * FROM ACCOUNT";
ResultSet rs = pstmt.executeQuery(sql);
while(rs.next()){ %>
    <%=rs.getString("NAME")%><BR>
<%}
pstmt.close();
rs.close();
conn.close();
%>

2010年10月4日月曜日

ロック

クライアントが同時にアクセスし、2つの処理が同時に実行された場合に情報の整合
性が取れなくなるのを防ぐ処理方法、


select * from ACCOUNTS WHERE IP=1 FOR UPDATE//FOR UPDATEでロックを行い、コミットでロック解除を行う、

Myql トランザクションのオートコミットをOFF

        Connection con =  DBManager.getConnection();
        con.setAutoCommit(false);//オートコミットをOFF

        String sql = "UPDATE ACCOUNT " + "SET MONEYS=MONEY-1000 WHERE IP=1" ;
        smt.executeUpdate(sql);

        sql = "UPDATE ACCOUNT" + "SET MONEYS=MONEYS-1000 WHERE IP=10" ;
        smt.executeUpdate(sql);


        smt.cancel(); //上記の二つのクエリが処理出来たならコミットする
        con.commit();
        con.close();

2010年9月27日月曜日

Jsp/Servletのスコープ

リクエストスコープの有効範囲は1つのリクエストが終わるまでの間です。
セッションスコープは同じクライアント間が有効範囲です。
アプリケーションスコープはWebアプリケーション内で有効です。リクエストやセッションが違っても有効です。また、アプリケーションコンテキストと呼ばれます。

■getAttribute(String name)での値はObjectで帰ってくるので、必要に応じてキャスト
行う、

■セッションIDとカウンター
package session;

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import sun.net.www.content.text.plain;

public class CounterServlet extends HttpServlet
{
    public void doGet(HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException, IOException
    {
        HttpSession session = request.getSession();//セッションの取得
       
        Integer count = (Integer) session.getAttribute("count");//セッションかたcountの取得
       
        if(count == null)//nullなら0を代入        {
            count = new Integer(0);
        }
        count = new Integer(count.intValue() + 1);//カウントUP
       
        session.setAttribute("count", count);//セッションに格納
        response.setContentType("text/html");
        PrintWriter pw = response.getWriter();
       
        pw.print("<p>sessionIdは" + session.getId() + "</p>");//セッションIDの取得       
        pw.print("<p>" + count + "</p>");//カウントの表示       
    }
   
}

Jsp/Servletでフィルター処理

■フィルター処理
public class TestFilter implements Filter
{
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException
    {
        request.setCharacterEncoding("Windows-31J");//文字コードの設定
        response.setContentType("text/plain; charset=Windows-31J");//文字コードの設定

chain.doFilter(request,response);//次の処理に渡す

■XMLの記述

    <filter>
        <filter-name>TestFilter</filter-name>
        <filter-class>filter.TestFilter</filter-class>
    </filter>
   
    <filter-mapping>
        <filter-name>TestFilter</filter-name>
        <url-pattern>/*</url-pattern>//すべてのファイルにフィルターを掛ける
    </filter-mapping>