yxhxj2006

常用链接

统计

最新评论

#

java程序员必知的8大排序

     摘要: 8种排序之间的关系:   1, 直接插入排序    (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数 也是排好顺序的。如此反复循环,直到全部排好顺序。  (2)实例 (3)用java实现 01 ...  阅读全文

posted @ 2012-08-04 12:24 奋斗成就男人 阅读(171) | 评论 (0)编辑 收藏

301跳转详细说明

    
    说明:A网站--->B网站--->C网站--->D网站,其中A为提交网站,可以通过get或者post表单传值,然后在B网站做301跳转,跳转到C网站。然后在从C网站跳转到网关D。

    具体代码实现步骤如下:
   (1):A网站:只是一个简单的form表单提交:
        <form action="B网站地址" id="pay" mothod="post">
            <input type="hidden" value="abc" name="param">
            <input type="submit"/>
       </form>

  (2):B网站:首先在B网站目录中写一个重写文件.htaccess。具体如下:
            RewriteEngine On         //开始重写引擎
            // .htaccess放到B网站/test2/目录下,表示该301跳转只在/test2/起作用,其他的目录则不起作用。
            RewriteBase /test2/                         
            // http://192.168.5.17:8090/test2/index.php 为B网站目录地址
            RewriteCond %{HTTP_HOST} !http://192.168.5.17:8090/test2/index.php [NC] 
            // http://192.168.5.17:8080/servlet01/dispatcher.jsp 为C网站地址
            RewriteRule ^(.*)$ http://192.168.5.17:8080/servlet01/dispatcher.jsp [L,R=301]      
  
  (3):C网站:首先获取A网站提交的参数:
            String param = request.getParameter("param");
            然后再组装form表单:
                <form action="D网站地址" id="pay" mothod="post">
                     <input type="hidden" value="<%=param %>" name="TradeInfo">
                     <input type="submit"/>
                </form>
    (4): D网站:获取从C网站提交过来的参数。

    重点:做了301跳转后,从C网站中可以获取到A提交过来的参数,而且C网站获取的来源网站居然是A网站,而不是B网站地址。经过测试发现:在B网站301跳转时,已经把从A网站提交的参数,组装成get方式提交方式(而不管你在A采用的是post还是get提交方式),
即:<a href="http://192.168.5.17:8080/servlet01/dispatcher.jsp?param=123456789">here</a> 然后会自动跳转到C网站。


         

posted @ 2012-08-03 18:17 奋斗成就男人 阅读(636) | 评论 (0)编辑 收藏

MYSQL数据库导入导出

导入:mysql -h hostname -u root -p databasename<test.sql
导出:mysqldump -h hostname  -u root -p databasename>test.sql

其中 -u root 表示用户名

   -p tian  表示密码

    test    表示数据库名(已存在的)

    test.sql  表示外部的脚本文件(文件名字、格式随便,例如:a.sql,a.abc......)
注意:-p后面不用填写密码,密码再执行了上面的语句后再输入

posted @ 2012-08-01 18:42 奋斗成就男人 阅读(111) | 评论 (0)编辑 收藏

java中的日期和sql中的日期转换以及java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.Timestamp区别和联系

将"yyyy-mm-dd"格式的字符串转换为java.sql.Date:

SimpleDateFormat bartDateFormat =   new SimpleDateFormat("yyyy-MM-dd");  
String dateStringToParse = "2007-7-12";  
try{  
       java.util.Date date = bartDateFormat.parse(dateStringToParse);  
       java.sql.Date sqlDate = new java.sql.Date(date.getTime());
       System.out.println(sqlDate.getTime());  
 
catch (Exception ex) {  
     System.out.println(ex.getMessage());  
}

 

java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.Timestamp区别和联系:

 

在java有关的项目开发工作中,我们常常要java.util.Date,  java.util.Calendar,   java.sql.Date,    java.sql.Time,   java.sql.Timestamp等几个类进行日期的处理和分析,那么这几个函数之间有什么样的联系,它们又有什么区别呢?

首先来说说它们之间的关系,java.util.Date这个类是java.sql.Date,  java.sql.Time,  java.slq.Timestamp这三个类的父类。这三个类对java.util.Date类进行了包装。

java.sql.Date类屏蔽了java.util.Date类的时间有关的方法(形如:hh:mm:ss),因此,不可以通过这个类访问时间有关的信息,比如,如果你通过sqlDate.getHour()方法去访问小时信息,此方法会抛出一个IllegalArgumentException异常。这是因为java.sql.Date在继承java.util.Date类的时候对父类进行了重写,禁用了时间访问的方法。之所以这么处理,是为了和数据库的Date数据类型相匹配,数据库的Date数据类行只是保存日期有关的字段。

Java.sql.Time类屏蔽了java.util.Date的日期有关的字段(形如:yyyy-MM-dd),因此,不能通过这个类访问日期有关的信息,比如:如果你通过sqlTime.getYear()方法去获取年有关的信息,此方法会抛出一个IllegalArgumentException异常。这是因为java.sql.Time在继承java.util.Date类的时候对父类进行了重写,禁用了日期访问的方法。之所以这么处理,是为了和数据库的Time数据类型相匹配,数据库的Time数据类行只是保存时间有关的字段。

Java.sql.Timestamp字段则对java.util.Date这个类进行了扩充,它在java.util.Date类的基础上增加了毫秒的时间访问控制,因此,你可以通过getNanos()方法去获取时间的毫微秒数(注意此处获取的时间是以毫微秒为单位的,1秒等于十亿毫微秒),同样的,这也是为了和数据库中的Timestamp数据类型进行匹配。

理清了上述四个类的关系,那么java.util.Date和java.util.Calendar类有什么关系呢?

Java.util.Calendar类是java.util.Date类的一个更加深入,更加全面的替代。Java.util.Calendar类支持java.util.Date的所有功能,此外,Calendar还引入了多语言,多区域的特性,可以根据需要获取不同区域,不同时区的时间,Calendar还增加了比Date更加方便和快捷的许多操作,如获取一年当中的第几个星期,各个月的天数等便捷的方法。

Java.util.Calendar区别与java.util.Date的几个地方也需要注意一下:首先,Calendar增加了毫秒的时间段,通过它可以获取时间点的毫秒值,而java.util.Date只是精确到秒。其次,Calendar过去年的时候是当前年份比如:2010,而Date获取年份的时获取到的是当前年份-1900的一个值(2010-1900=110,因此,你调用getYear后过去的值就是110)。最后Calendar是一个抽象类,之所以能够实例化,是因为此处的Calendar充当了一个类似于工厂的作用,在getInstance方法中实例化了Calendar子类GregorianCalendar,并把它返回给客户使用。

posted @ 2012-08-01 18:33 奋斗成就男人 阅读(529) | 评论 (0)编辑 收藏

execute、executeUpdate、executeQuery三者的区别(及返回值)

一、boolean execute(String sql)
允许执行查询语句、更新语句、DDL语句。
返回值为true时,表示执行的是查询语句,可以通过getResultSet方法获取结果;返回值为false时,执行的是更新语句或DDL语句,getUpdateCount方法获取更新的记录数量。
例子:
public static void main(String[] args) {

  Connection conn 
= null;
  Statement stm 
= null;
  ResultSet rs 
= null;
  
try {
   Class.forName(
"com.microsoft.sqlserver.jdbc.SQLServerDriver");
   conn 
= DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=Test;user=sa;password=sasa");
   stm 
= conn.createStatement();
   
boolean ret = stm.execute("select * from stuinfo");
   
if(ret){
    rs 
= stm.getResultSet();
    
while(rs.next()){
     System.out.println(
"姓名:"+rs.getString("stuName")+"\t年龄:"+rs.getString("stuScore"));
    }

   }

   ret 
= stm.execute("update stuinfo set stuScore=62 where stuname='张三'");
   
int count = stm.getUpdateCount();
   
if(!ret){
    System.out.println(count
+"条数据修改成功!");
   }

  }
 catch (ClassNotFoundException e) {
   e.printStackTrace();
  }
 catch (SQLException e) {
   e.printStackTrace();
  }
  
 }

二、
int executeUpdate(String sql)
执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 SQL DDL 语句)。
返回值是更新的记录数量
三、ResultSet executeQuery(String sql)
执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。

posted @ 2012-08-01 18:31 奋斗成就男人 阅读(4555) | 评论 (0)编辑 收藏

struts2.0工作原理

最近学习struts2,其实它就是webwork2.2的升级版,现附上原理图 

struts2.0工作原理 - caoyanhua_05 - caoyanhua_05的博客

上图来源于Struts2官方站点,是Struts 2 的整体结构。

一个请求在Struts2框架中的处理大概分为以下几个步骤

1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求

2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)

3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action

4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy

5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类

6 ActionProxy创建一个ActionInvocation的实例。

7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

 

在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。

posted @ 2012-08-01 17:46 奋斗成就男人 阅读(171) | 评论 (0)编辑 收藏

Struts2拦截器(Interceptor)

     摘要: 1.    理解拦截器 1.1.    什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。 在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。...  阅读全文

posted @ 2012-08-01 17:44 奋斗成就男人 阅读(180) | 评论 (0)编辑 收藏

Struts2文件的上传和下载

     摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1.    文件上传的原理:表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值:1)     ...  阅读全文

posted @ 2012-08-01 17:41 奋斗成就男人 阅读(580) | 评论 (0)编辑 收藏

Java中定时器

对于开发游戏项目的同胞来说,Timer 这个东西肯定不会陌生,今天放假闲来无事,对以前自己经常使用的定时进行了一番小小的总结!没有写具体实现的原理,只是列举出了其中的四种比较常见的使用方法,相对而言,所以只要按照其所列举的例子仿照即可!

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TimeTest {
    
public static void main(String[] args) {
        timer1();
        
//timer2();
        
//timer3();
        
//timer4();
    }


    
// 第一种方法:设定指定任务task在指定时间time执行 schedule(TimerTask task, Date time)
    public static void timer1() {
        Timer timer 
= new Timer();
        timer.schedule(
new TimerTask() {
            
public void run() {
                System.out.println(
"-------设定要指定任务--------");
            }

        }
2000);// 设定指定的时间time,此处为2000毫秒
    }


    
// 第二种方法:设定指定任务task在指定延迟delay后进行固定延迟peroid的执行
    
// schedule(TimerTask task, long delay, long period)
    public static void timer2() {
        Timer timer 
= new Timer();
        timer.schedule(
new TimerTask() {
            
public void run() {
                System.out.println(
"-------设定要指定任务--------");
            }

        }
10005000);
    }


    
// 第三种方法:设定指定任务task在指定延迟delay后进行固定频率peroid的执行。
    
// scheduleAtFixedRate(TimerTask task, long delay, long period)
    public static void timer3() {
        Timer timer 
= new Timer();
        timer.scheduleAtFixedRate(
new TimerTask() {
            
public void run() {
                System.out.println(
"-------设定要指定任务--------");
            }

        }
10002000);
    }

    
    
// 第四种方法:安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行.
    
// Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
    public static void timer4() {
        Calendar calendar 
= Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 
12); // 控制时
        calendar.set(Calendar.MINUTE, 0);       // 控制分
        calendar.set(Calendar.SECOND, 0);       // 控制秒

        Date time 
= calendar.getTime();         // 得出执行任务的时间,此处为今天的12:00:00

        Timer timer 
= new Timer();
        timer.scheduleAtFixedRate(
new TimerTask() {
            
public void run() {
                System.out.println(
"-------设定要指定任务--------");
            }

        }
, time, 1000 * 60 * 60 * 24);// 这里设定将延时每天固定执行
    }

}

posted @ 2012-08-01 17:36 奋斗成就男人 阅读(1019) | 评论 (1)编辑 收藏

Javascript 常用验证

     摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->javascript常用验证:(1):验证IP地址:function checkIP(){  var ipArray,ip,j;  ip&nbs...  阅读全文

posted @ 2012-07-24 12:34 奋斗成就男人 阅读(249) | 评论 (0)编辑 收藏

仅列出标题
共23页: First 上一页 15 16 17 18 19 20 21 22 23 下一页