Recent Posts

 
18Mar

高效简单的JSP分页代码分

  1. <%@ page import="java.sql.*,java.io.*,java.util.*" %>
  2.   <%@ page language="java" pageEncoding="Big5" %>
  3.   <%! String au_id,au_lname,au_fname,phone,address,city,state;%>
  4.   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  5.   <html>
  6.   <head>
  7.   <title>ArticleList</title>
  8.   <link rel="stylesheet" href="style.css">
  9.   </head>
  10.   <body bgcolor="#FFFFFF">
  11.   
  12.   <table width="760" border="0" cellspacing="0" cellpadding="0" align="center">
  13.   <tr>
  14.   <td>
  15.   <table width="750" border="0" cellspacing="2" cellpadding="2" align="center">
  16.   <tr align="center">
  17.   <td> </td>
  18.   </tr>
  19.   <tr>
  20.   <td>
  21.   <table width="740" border="0" cellspacing="1" cellpadding="1" align="center">
  22.   <tr align="center" bgcolor="#CCCCCC">
  23.   <td><b>标题</b></td>
  24.   <td><b>作者</b></td>
  25.   <td><b>类型</b></td>
  26.   <td><b>点击</b></td>
  27.   <td><b>加入时间</b></td>
  28.   </tr>
  29.   <%
  30.   int i;
  31.   int ipage=5; //分页单位
  32.   int allpage; //总页数
  33.   int pages; //接受的页码变量
  34.   int cpage=1; //当前页
  35.   int spage; //开始页
  36.   int allCol=0;
  37.   Vector v=null;
  38.   
  39.   //数据库连接声明
  40.    Connection conn=null;
  41.    java.lang.String sql,pagesql;
  42.    java.sql.ResultSet rs,pagers;
  43.    Statement statement=null;
  44.    String kmsdb="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=DBName";
  45.    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
  46.     conn = DriverManager.getConnection(kmsdb, "user", "pwd");
  47.   
  48.    pagesql = "sel&#101;ct COUNT(*) FROM Authors";
  49.   
  50.   //取总文章数
  51.   statement = conn.cr&#101;ateStatement();
  52.   pagers = statement.executeQuery(pagesql);
  53.    while(pagers.next())
  54.    {
  55.    allCol = pagers.getInt(1);
  56.    System.out.println(allCol);
  57.   
  58.    }
  59.   
  60.   //获得总页面数
  61.   allpage = (int)Math.ceil((allCol + ipage-1) / ipage);
  62.   //判断参数pages是否空
  63.   if (request.getParameter("pages")==null) {
  64.   pages=1;
  65.   } else {
  66.   pages = new Integer(request.getParameter("pages")).intValue();
  67.   System.out.println(pages);
  68.   }
  69.   //判断当前页
  70.   if(pages > allpage || pages == 0)
  71.   {cpage = 1;}
  72.   else
  73.   {
  74.   cpage = pages;
  75.   }
  76.   //判断起始页
  77.   sql = "sel&#101;ct Top "+ipage+" au_id,au_lname,au_fname,address,phone from authors wh&#101;re au_id not in (sel&#101;ct top "+(cpage-1)*ipage+" au_id from authors order by au_id desc)order by au_id desc";
  78.   rs = statement.executeQuery(sql);
  79.   while (rs.next())
  80.   {
  81.    au_id=rs.getString("au_id");
  82.    au_lname=rs.getString("au_lname");
  83.    au_fname=rs.getString("au_fname");
  84.    phone=rs.getString("phone");
  85.    address=rs.getString("address");
  86.   
  87.   %>
  88.    <td width="300"><%= au_id %></a></td>
  89.    <td width="300"><%= au_lname %></a></td>
  90.    <td width="300"><%= au_fname %></a></td>
  91.    <td width="300"><%= phone %></a></td>
  92.    <td width="300"><%= address %></a></td>
  93.   </tr>
  94.   <%  
  95.   }%>
  96.   <tr bgcolor="#CCCCCC">
  97.   <td colspan="5" align="right" valign="middle"><%= allCol %>条记录 共 <%= allpage %><% if (cpage>1) { %><a href="fy.jsp?pages=<%= cpage-1 %>"><img src="images/prev.gif" border="0"></a><% } if (cpage<allpage) { %><a href="fy.jsp?pages=<%= cpage+1 %>"><img src="images/next.gif" border="0"></a><% } %> / <% for (i=1;i<=allpage;i++) { if (i != pages) {%><a href="fy.jsp?pages=<%= i %>"><%= i %></a> <% }} %></td>
  98.   </tr>
  99.   </table>
  100.   </td>
  101.   </tr>
  102.   </table>
  103.   </td>
  104.   </tr>
  105.   </table>
  106.   </body>
  107.   </html>
18Mar

让你的IIS也解析jsp文件

1)说明
我用的配置如下:Win2000 Professional + IIS 5.0(Win2000自带)+ Tomcat 3.1 binary release.
我使用的Tomcat 3.1是编译过的版本,在这个版本里面没有配置IIS和NT Service 的说明,但是在Tocmcat 3.2 source版里面有比较详细的帮助文件。根据这些帮助文件 可以顺利的把Tomcat作为插件插入IIS。

2)启动Tomcat
要启动Tomcat很简单,首先可以查看tomcat\bin\startup.bat文件,利用控制 面板里面的系统->高级->环境变量对话框,新建环境变量TOMCAT_HOME和JAVA _HOME,使它们各自指向TOMCAT和JDK的根目录即可。
另外为保险起见,可以在path 里面把二者的路径添加进去。然后开启一个DOS窗口执行startup.bat。 启动Tomcat后,会有一个DOS窗口显示启动情况。此时访问http://localhost: 8080可以看到Tomcat的一些示例。

3)配置方法 下一步工作就是如何把Tomcat插入IIS,使二者协同工作。
主要分以下几个步骤:

1、在Windows注册表中创建一个新键: “HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redire ctor\1.0″

2、在这个键中建立如下条目和字符串键值。 名称值extension_uri “/jakarta/isapi_redirect.dll”
(不要改动)
log_file 指定你的log文件路径,例如”d:\tomcat\isapi.log”。
log_level “debug”,”inform”,”error”, “emerg”4个中任选一个
worker_file workers.properties文件的路径, 例如:\tomcat\conf\workers.properties”
name worker_mount_fileand
uriworkermap.properties 文件的路径,例如”d:\tomcat\conf\uriworkermap.properties”

(其实3.2中带了一个xxxxx.reg.auto的文件,把这个文件里面的内容按照自己的实际情况修改一下,把文件名改为xxxx.reg,然后双击这个文件就行了)

3、打开IIS管理器,在“默认WEB站点”中建立一个虚拟目录jakarta,让它的路径指向isapi_redirect.dll所在目录。
(在3.1 bin中可能没有这个dll,你可以从3.2 的bin\iis\nt4\i386目录中拷贝一个过来。该虚拟目录应被设置为“可执行”。 )

4、利用IIS管理器,把isapi_redirect.dll设置为“默认WEB站点”的ISAPI筛选器, 名称可以任起。

5、重启IIS,确认刚才添加的ISAPI筛选器前面标了一个绿色向上的箭头 然后重启Tomcat(执行tomcat\bin\shutdown.bat可关闭Tomcat) 此时,IIS应该已经可以处理*.jsp文件了。
由于Tomcat设置中,默认的Root是 tomcat\webapps\ROOT,
所以你可以在这个目录中放置一个jsp文件(例如 index.jsp),然后访问http://localhost/index.jsp,看一下效果。
如果按照上面的方法还是无法使IIS处理jsp文件,可以尝试在IIS管理器-> 默认WEB站点属性->主目录->配置中添加一个“应用程序映射”,把*.jsp文件 映射到isapi_redirect.dll上。

4)作为NT service 作为NT service的设置比较简单。
首先从3.2拷贝过来jk_nt_service.exe,然后把下面的内容保存起来,起名为wrapper.properties
#
# $Header: /home/cvs/jakarta-tomcat/src/etc/wrapper.properties,v 1.1
#2000/05/03 11:54:49 shachor Exp $
# $Revision: 1.1 $
# $Date: 2000/05/03 11:54:49 $
#
#
# jk_service.properties - a bootstrup file for the Tomcat NT service.
#
# This file provides jk_nt_service with the needed information to
# start tomcat at a different process.
#
# As a general note, the characters $( and ) are used internally to define
# macros. Do not use them!!!
#
# Whenever you see a set of lines such as:
# x=value
# y=$(x)\something
#
# the final value for y will be value\something
#
# Normaly all you will need to modify is the first two properties, i.e.
# wrapper.tomcat_home and wrapper.java_home. Most of the configuration
# is derived from these two.
#
#
# wrapper.tomcat_home should point to the location where you
# installed tomcat. This is where you have your conf, webapps and lib
# directories.
# wrapper.tomcat_home=d:\tomcat #
# wrapper.java_home should point to your Java installation. Normally
# you should have a bin and lib directories beneath it.
# wrapper.java_home=d:\JBuilder35\jdk1.2.2
# #—— ADVANCED MODE ————————————————
# Make sure that you read the how-to before making too many changes. #——
—————————————————————
#
#
# Defining where the service is going to put the standard
# output of Tomcat. This is where System.out.println and
# System.err.println goes to.
# wrapper.stdout=$(wrapper.tomcat_home)\jvm.stdout wrapper.stderr=$(wrapper.
tomcat_home)\jvm.stderr
#
# Additions to the path. put here directories where you store DLLs for
# native methods etc.
# wrapper.ld_path=d:\ wrapper.ld_path=c:\
#
# Defining the classpath. All the rows that belongs to the class_path
# property are concatenated to create the classpath for Tomcat.
#
# If you have additional locations that you would like to add to the
# claspath you should add a new wrapper.class_path= line.
# wrapper.class_path=$(wrapper.tomcat_home)\classes wrapper.class_path=$(wrapper.tomcat_home)\lib\xml.jar wrapper.class_path=$(wrapper.tomcat_home)\lib\
webserver.jar wrapper.class_path=$(wrapper.tomcat_home)\lib\servlet.jar wrap
per.class_path=$(wrapper.tomcat_home)\lib\jasper.jar
#
# This is where Javac is located in JDK1.2.x # wrapper.class_path=$(wrapper.java_home)\lib\tools.jar
#
# and a tribute
to JDK1.1.x # wrapper.class_path=$(wrapper.java_home)\lib\classes.zip
#
# This is the Java interpreter used for running Tomcat
# wrapper.javabin=$(wrapper.java_home)\bin\java.exe
#
# This is Tomcat’s startup class (the class that contains Tomcat’s
# starting point.
# wrapper.startup_class=org.apache.tomcat.startup.Tomcat
#
# This is the location where tomcat’s server.xml configuration file
# is located.
# wrapper.server_xml=$(wrapper.tomcat_home)\conf\server.xml
#
# The NT service uses AJP12 to shutdown Tomcat. The wrapper.shutdown_port
# tells the service the identity of the port that is used by AJP12.
# wrapper.shutdown_port=8007
#
# This is the command line that is used to start Tomcat. You can *add* extra
# parameters to it but you can not remove anything.
# wrapper.cmd_line=$(wrapper.javabin) -classpath $(wrapper.class_path)$(wrapp er.startup_class) -config $(wrapper.server_xml) -home $(wrapper.tomcat_home)

保存后,只需修改里面的wrapper.tomcat_home和wrapper.java_home,使它们各自指向tomcat根目录和JDK根目录即可。
然后运行jk_nt_service -I <服务名称> 服务名称可以随便起,例如tomcat或者jakarta等等都行。
wrapper.pro perties的路径应为完整路径(包括wrapper.properties这个文件名)
示例:jk_nt_service -I Jakarta d:\wrapper.properties 这样在控制面板->服务里面,我们可以看到一个名为Jakarta的服务,
可以 在这里启动或者中止它。

总结:

对于TOMCAT+IIS配置方法给出了详细的说明。

13Mar

ubuntu下wine模拟了QQ

昨天LumaQQ登陆不了,EVA也是,CU,UBUNTU论坛上有几位朋友也都吵着骂TX,说QQ协议又改了,登陆不了了!!
我也没试,直接wine模拟了QQ
界面美观,但是不能打汉字,输入法的问题解决不了!
以下截图!
以及系统监视器!!!

03Mar

My Ubuntu Beryl Matrix 3D Desktop

21Feb

irpHook的代码~

  1. NTSTATUS FASTCALL
  2. NewpIofCallDriver(
  3. IN PDEVICE_OBJECT DeviceObject,
  4. IN OUT PIRP Irp
  5. )
  6. {
  7. NTSTATUS stat;
  8. DbgPrint("Hacked Great!");
  9. //Code deleted
  10. __asm
  11. {
  12. mov ecx,DeviceObject
  13. mov edx,Irp
  14. Call old_piofcalldriver
  15. mov stat,eax
  16. }
  17. return stat;
  18. }
  19. NTSTATUS DriverIoControl(
  20. IN PDEVICE_OBJECT DeviceObject,
  21. IN PIRP Irp)
  22. {
  23. PIO_STACK_LOCATION pisl;
  24. NTSTATUS ns = STATUS_UNSUCCESSFUL;
  25. ULONG BuffSize, DataSize;
  26. PVOID pBuff, pData,pInout;
  27. KIRQL OldIrql;
  28. ULONG i;
  29. pisl = IoGetCurrentIrpStackLocation (Irp);
  30.  
  31. BuffSize = pisl->Parameters.DeviceIoControl.OutputBufferLength;
  32.  
  33. pBuff = Irp->AssociatedIrp.SystemBuffer;
  34.  
  35. Irp->IoStatus.Information = 0;
  36. switch(pisl->Parameters.DeviceIoControl.IoControlCode)
  37. {
  38. case IOCTL_DISABLE:
  39. {
  40. //Code deleted
  41. ns = STATUS_SUCCESS;
  42. break;
  43. }
  44. case IOCTL_ENABLE:
  45. {
  46. //Code deleted
  47. ns = STATUS_SUCCESS;
  48. break;
  49. }
  50. }
  51.  
  52. Irp->IoStatus.Status = ns;
  53. IoCompleteRequest(Irp, IO_NO_INCREMENT);
  54. return ns;
  55. }
  56.  
  57. NTSTATUS DrivercreateClose(
  58. IN PDEVICE_OBJECT DeviceObject,
  59. IN PIRP Irp)
  60. {
  61. Irp->IoStatus.Information = 0;
  62. Irp->IoStatus.Status = STATUS_SUCCESS;
  63. IoCompleteRequest(Irp, IO_NO_INCREMENT);
  64. return STATUS_SUCCESS;
  65.  
  66. }
  67.  
  68. VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)
  69. {
  70. IodeleteSymbolicLink(&SymbolicLinkName);
  71. IodeleteDevice(deviceObject);
  72. }
  73. NTSTATUS DriverClose(
  74. IN PDEVICE_OBJECT DeviceObject,
  75. IN PIRP Irp)
  76. {
  77. return DrivercreateClose(DeviceObject,Irp);
  78. }
  79. NTSTATUS IoComplete(
  80. IN PDEVICE_OBJECT DeviceObject,
  81. IN PIRP Irp)
  82. {
  83. IoCompleteRequest(Irp,IO_NO_INCREMENT);
  84. return STATUS_SUCCESS;
  85.  
  86. }
  87.  
  88. void HookpIofCallDriver()
  89. {
  90. KIRQL oldIrql;
  91. ULONG addr = (ULONG)IofCallDriver;
  92. __asm
  93. {
  94. mov eax,addr
  95. mov esi,[eax+2]
  96. mov eax,[esi]
  97. mov old_piofcalldriver,eax
  98. }
  99. oldIrql = KeRaiseIrqlToDpcLevel();
  100. __asm{
  101. mov eax,cr0
  102. mov oData,eax
  103. and eax,0xffffffff
  104. mov cr0,eax
  105. mov eax,addr
  106. mov esi,[eax+2]
  107. mov dword ptr [esi],offset NewpIofCallDriver
  108. mov eax,oData
  109. mov cr0,eax
  110. }
  111. KeLowerIrql(oldIrql);
  112. return ;
  113. }
  114. NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
  115. IN PUNICODE_STRING RegistryPath)
  116. {
  117. NTSTATUS status;
  118. PDRIVER_DISPATCH *ppdd;
  119. ULONG i;
  120. PCWSTR dDeviceName = L"\\Device\\irphook";
  121. PCWSTR dSymbolicLinkName = L"\\DosDevices\\irphook";
  122.  
  123. RtlInitUnicodeString(&DeviceName, dDeviceName);
  124. RtlInitUnicodeString(&SymbolicLinkName, dSymbolicLinkName);
  125. status = IocreateDevice(DriverObject, 0, &DeviceName, FILE_DEVICE_UNKNOWN, 0, TRUE, &deviceObject);
  126. if (!NT_SUCCESS(status)) return status;
  127. status = IocreateSymbolicLink(&SymbolicLinkName, &DeviceName);
  128. #ifdef DEBUG
  129. DriverObject->DriverUnload = DriverUnload;
  130. #endif
  131. DriverObject->DriverUnload =0;
  132. ppdd = DriverObject->MajorFunction;
  133. for(i =0;i<=IRP_MJ_MAXIMUM_FUNCTION;i++)
  134. ppdd = IoComplete;
  135.  
  136. ppdd [IRP_MJ_create] = DrivercreateClose;
  137. ppdd [IRP_MJ_DEVICE_CONTROL ] = DriverIoControl;
  138. g_drvobj = DriverObject;
  139. HookpIofCallDriver();
  140. return status;
  141. }