goo blog サービス終了のお知らせ 

いまここ

うはwww

Ajax+Servletで、アクセスしてきた奴らのIPアドレスを取得する方法。

2008-11-23 21:11:00 | Java
Ajax+Servletで、アクセスしてきた奴らのIPアドレスを取得する方法。

備忘録
Ajax(prototype.js)と、JavaServletを利用して、アクセスユーザーのグローバルIPアドレスを取得して、データベース(MySQL)に貯めておく方法。

前準備
サーバー機:MacBook
クライアント端末:iPhone 3G
プロジェクト名:gipaddr
参照ライブラリ:servlet-api.jar(./WEB-INF/lib)
参照ライブラリ:mysql-connector-java-bin.jar(./WEB-INF/lib)
参照ライブラリ:prototype.js(./WEB-INF)
Servletクラス:gipaddr.class
htmlファイル:index.html

MySQLデータベース作成

$ mysql u- root p
Password:
mysql>create database dbgipaddr;
Query OK, 1 row affected (0.00 sec)
mysql>create table dbgipaddr.tblgipaddr(
-> seq int auto_increment not null primary key,
-> gipaddr char(15) not null,
-> username varchar(256) not null,
-> timestamp timestamp not null
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> insert into dbgipaddr.tblgipaddr(gipaddr, username) values('000.000.000.000','user');
Query OK, 1 row affected (0.00 sec)
mysql> select * from dbgipaddr.tblgipaddr;
+-----+-----------------+--------------+---------------------+
| seq | gipaddr | username | timestamp |
+-----+-----------------+--------------+---------------------+
| 1 | 000.000.000.000 | user | 2008-11-23 19:07:51 |
+-----+-----------------+--------------+---------------------+
1 row in set (0.00 sec)


Ajaxページ作成 index.html

<html>
<head>
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript"></script>
<title></title>
</head>
<body>


</body>
</html>


サーブレット側作成 gipaddr.java

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 java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;

public class gipaddr extends HttpServlet {
public gipaddr() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
if (!request.getLocalAddr().equals(request.getRemoteAddr())){
Connection con = null;
PreparedStatement stmt = null;
String sql = "insert into dbgipaddr.tblgipaddr(gipaddr, username) values('"+request.getRemoteAddr()+"','"+request.getRemoteUser()+"')";
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/","root","");
stmt = con.prepareStatement(sql);
stmt.executeUpdate();
out.println("こんにちわ");
}catch(Exception e){
out.println(e);
}finally{
if(con!=null){
try{
con.close();
}catch(Exception e){
out.println(e);
}
}
}
}else{
out.println("サーバー機です。");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
super.doPost(request, response);
}


クライアント端末(iPhone 3G)で、サーバー端末(MacBook)にアクセスしたとき。

mysql> select * from dbgipaddr.tblgipaddr;
+-----+-----------------+--------------+---------------------+
| seq | gipaddr | username | timestamp |
+-----+-----------------+--------------+---------------------+
| 1 | 000.000.000.000 | user | 2008-11-23 19:07:51 |
| 2 | 192.168.11.3 | null | 2008-11-23 19:38:01 |
+-----+-----------------+--------------+---------------------+
2 rows in set (0.00 sec)


Lan内だから、ローカルIP取得になったけど、Webサーバ公開した時、たぶんグローバルIP取得出来るとおもう。

Struts + Ajax 開発時、なぜかエラー。

2008-10-31 23:51:17 | Java
備忘録

Eclipse 3.4で、Struts + AjaxなWebアプリケーション開発してたら、コンソールにWARNINGが出た。
2008103101

WARNING内容

WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:StrutsAjax' did not find a matching property.


解決策
"Servers"タブを選択後、"▼ Tomcat v6.0 Server at localhost"の項目をダブルクリックすると、"OverView"画面が表示する。
2008103102

画面下部に、"Server Options"項目があり、"Publish module contexts to searate XML files"にチェックを入れる。
2008103103

Server設定の変更を保存しようとしたら、エラーが出力される。
これは、Serverが稼働中なので、設定変更を保存出来ません。というエラー。
2008103104

ServerをStopする。
どこからでも"Stop"しても良いが、今回は"Servers"タブ内の、"Tomcat v6.0 Server at localhost"を右クリックして、"Stop"を選択した。
2008103105

Serverを再起動する。
キレイ見事さっぱりWARNINGが消えた。
しかも、エラー色(赤)から、正常色(黒)に変わった。
2008103106

俺乙。

Debianで、MySQLをインストールする

2008-06-16 20:02:01 | Java
備忘録

$ apt-get install -y mysql-server
$ mysql -u root -p
Password:
mysql>exit
Bye
$

JDBCに接続するため、MySQLコネクタ/Jをダウンロードする。
tarか、zipファイルを展開する。

$ wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.6.tar.gz
$ tar -xvf mysql-connector-java-5.1.6.tar.gz
$ mv mysql-connector-java-5.1.6/mysql-connector-java-5.1.6-bin.jar mysql-connector.jar
$ mv mysql-connector.jar /usr/local/java/lib/
$ export classpath=.:/usr/local/java/lib/mysql-connector.jar
$ source /etc/profile



Debianで、Java実行できない。

2008-06-13 02:33:54 | Java
備忘録
おかしいな。
どこがいけないんだろう。

@debian:~$ cd ./Desktop
@debian:~Desktop$ wget http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/VerifyItem-Start/jdk-6u6-linux-i586.bin?BundledLineItemUUID=zwVIBe.m7zIAAAEaME4M.n3m&OrderID=CBhIBe.mAE0AAAEaI04M.n3m&ProductID=VXZIBe.ootIAAAEZTrBAkQve&FileName=/jdk-6u6-linux-i586.bin
@debian:~$ ../
@debian:~$ su
Password:
@debian:~# mkdir /usr/local/java
@debian:~# cp /home/<Users>/Desktop/jdk-6u6-linux-i586.bin /usr/local/java/
@debian:~# chmod 777 /usr/local/java/jdk-6u6-linux-i586.bin
@debian:~# ./usr/local/java/jdk-6u6-linux-i586.bin
Yes [or] No
y
Done.
@debian:~# vi /etc/bash.bashrc
# INS START 20080613
export JAVA_HOME=/usr/local/java/jdk1.6.0_06
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
# INS END 20080613
@debian:~$ mkdir java
@debian:~$ cd java
@debian:~/java$ vi Sample.java
public class Sample{
public static void main(String[] args){
System.out.println("Hello World!!");
}
}
@debian:~/java$ javac Sample.java
@debian:~/java$ java Sample
Exception in thread "main" java.lang.ClassFormatError: Sample (unrecognized class file version)
at java.lang.VMClassLoader.defineClass(libgcj.so.70)
at java.lang.ClassLoader.defineClass(libgcj.so.70)
at java.security.SecureClassLoader.defineClass(libgcj.so.70)
at java.net.URLClassLoader.findClass(libgcj.so.70)
at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.70)
at java.lang.ClassLoader.loadClass(libgcj.so.70)
at java.lang.ClassLoader.loadClass(libgcj.so.70)
at gnu.java.lang.MainThread.run(libgcj.so.70)
@debian:~/java$