using System;
using System.IO;
using System.Web;
using System.Data;
using System.Data.SqlClient;
namespace Com.Msn.Wings {
public class LogAccessHandler : IHttpHandler {
public bool IsReusable {
get {
return true;
}
}
public void ProcessRequest(HttpContext context) {
String strTmp = context.Request.Url.ToString();
String strPth = strTmp.Substring(0, strTmp.LastIndexOf("/"));
// リクエストURLから親フォルダまでのパスを取得
SqlConnection objDb = new SqlConnection("Data Source=(local);User ID=sa;Password=sa;Persist Security Info=True;Initial Catalog=nettips");
SqlCommand objCom = new SqlCommand("SELECT url,SUM(cnt) FROM accessLog WHERE url LIKE @url GROUP BY url",objDb);
objCom.Parameters.Add("@url", strPth + "%");
// 指定されたフォルダ配下のファイルに関するログ情報を取得
objDb.Open();
SqlDataReader objDr = objCom.ExecuteReader();
HttpResponse res = context.Response;
res.Write("<html>");
res.Write("<head><title>" + strPth + "</title></head>");
res.Write("<body>");
res.Write("<h1>「" + strPth + "」アクセスログ</h1>");
res.Write("<table border='1'>");
res.Write("<tr bgcolor='Tan'><th>URL</th><th>カウント数</th></tr>");
String color;
int cnt = 0;
while (objDr.Read()) {
if (cnt % 2 == 0) {
color = "LightGoldenrodYellow";
} else {
color = "PaleGoldenrod";
}
// 偶数行・奇数行で背景色を切り替え
cnt++;
res.Write("<tr bgcolor='" + color + "'>");
res.Write("<td>" + objDr.GetString(0) + "</td>");
res.Write("<td align='right'>" + objDr.GetInt32(1) + "</td></tr>");
}
res.Write("</table></body></html>");
// 取得したログ情報をテーブル表示
objDr.Close();
objDb.Close();
}
}
}
ログ参照を行うHTTPハンドラ・クラス(C#:LogAccessHandler.cs)
Imports System
Imports System.IO
Imports System.Web
Imports System.Data
Imports System.Data.SqlClient
Namespace Com.Msn.Wings
Public Class LogAccessHandler : Implements IHttpHandler
Public ReadOnly Property IsReusable As Boolean Implements IHttpHandler.IsReusable
Get
Return True
End Get
End Property
Sub ProcessRequest(context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim strTmp As String=context.Request.Url.ToString()
Dim strPth As String=strTmp.Substring(0,strTmp.LastIndexOf("/"))
' リクエストURLから親フォルダまでのパスを取得
Dim objDb As New SqlConnection("Data Source=(local);User ID=sa;Password=sa;Persist Security Info=True;Initial Catalog=nettips")
Dim objCom As New SqlCommand("SELECT url,SUM(cnt) FROM accessLog WHERE url LIKE @url GROUP BY url",objDb)
objCom.Parameters.Add("@url",strPth & "%")
' 指定されたフォルダ配下のファイルに関するログ情報を取得
objDb.Open()
Dim objDr As SqlDataReader =objCom.ExecuteReader()
With context.Response
.Write("<html>")
.Write("<head><title>" & strPth & "</title></head>")
.Write("<body>")
.Write("<h1>「" & strPth & "」アクセスログ</h1>")
.Write("<table border='1'>")
.Write("<tr bgcolor='Tan'><th>URL</th><th>カウント数</th></tr>")
Dim color As String
Dim cnt As Integer=0
Do While objDr.Read()
If cnt Mod 2=0 Then
color="LightGoldenrodYellow"
Else
color="PaleGoldenrod"
End If
' 偶数行・奇数行で背景色を切り替え
cnt=cnt+1
.Write("<tr bgcolor='" & color & "'>")
.Write("<td>" & objDr.GetString(0) & "</td>")
.Write("<td align='right'>" & objDr.GetInt32(1) & "</td></tr>")
Loop
.Write("</table></body></html>")
End With
' 取得したログ情報をテーブル表示
objDr.Close()
objDb.Close()
End Sub
End Class
End Namespace