Struts2 Lesson3: Parse for configures of struts.xml in common use

使用<include>标签重用配置文件

在Struts2中提供了一个默认的struts.xml文件,但如果package、action、interceptors等配置比较多时,都放到一个struts.xml文件不太容易维护。因此,就需要将struts.xml文件分成多个配置文件,然后在struts.xml文件中使用<include>标签引用这些配置文件。这样做的优点如下:

结构更清晰,更容易维护配置信息。

配置文件可以复用。如果在多个Web程序中都使用类似或相同的配置文件,那么可以使用<include>标签来引用这些配置文件,这样可以减少工作量。

Struts2Lesson 2: How ti deal with a form with more than one submit

在很多Web应用中,为了完成不同的工作,一个HTML form标签中可能有两个或多个submit按钮,如下面的代码所示:

<!--[if !supportLineBreakNewLine]-->
<htmlaction="…" method="post">
……
<inputtype="submit"value="保存"/>
<inputtype="submit"value="打印"/>
</html> 

My first Struts2 Programme

在本教程中使用的工具和程序库的版本如下:

开发工具:MyEclipse6

Web服务器:Tomcat6

Struts版本:Struts2.0.11.1

JDK版本:JDK1.5.0_12

J2EE版本:Java EE5.0

在本系列教程中Web工程的上下文路径都是struts2,如果在Web根目录有一个index.jsp文件,则访问路径如下:

    http://localhost:8080/struts2/index.jsp

由于MyEclipse6目前并不支持Struts2,所以我们需要到struts.apache.org去下载Struts2安装包。要想正常使用Struts2,至少需要如下五个包(可能会因为Struts2的版本不同,包名略有差异,但包名的前半部是一样的)。

    struts2-core-2.0.11.1.jar

    xwork-2.0.4.jar

    commons-logging-1.0.4.jar

    freemarker-2.3.8.jar

    ognl-2.6.11.jar

基于J2EE的用户登录设计与登录实现

引言

为改变传统的登录方式,方便用户充分利用网络资源,我们改进了用户登录的方式,建立了用户帐户认证中心系统,负责治理对所有的用户建立网络用户登录标识的各种资料,治理登录和注销过程。用户只需一次登录,就可以访问其拥有的权限和资源,极大地方便了用户的使用,提高了系统资源的利用效益。

基于J2EE用户登录的设计

系统采用多层(N-tier)开发模式,基本构架总体上分为四层:系统平台层、服务层和应用层,在服务层和系统平台层之间构架系统的数据层,使得系统数据独立、安全。

系统平台采用J2EE标准,基于J2EE标准开发的应用可以跨平台地移植,并提供了企业计算中需要的各种服务;J2EE中多数标准定义了接口,例如JNDI, JDBC等,因此可以和许多厂商的产品配合,轻易得到广泛的支持;J2EE树立了一个广泛而通用的标准,大大简化了应用开发和部署过程。操作系统可以使用基于MS Windows 、或者UNIX、LUNIX等操作系统。

Java-设计模式概述

设计模式:一个设计模式描述了一个被证实可行的方案。这些方案非常普遍,是具有完整定义的最常用的模式。一般模式有4个基本要素:模式名称(pattern name)、问题(problem)、解决方案(solution)、效果(consequences)。
常见23种模式概述:
1) 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
2) 适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。
3) 桥梁模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
4) 建造模式(Builder):将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。
5) 责任链模式(Chain of Responsibility):为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
6) 命令模式(Command):将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。

为何要使用64位版本Windows 7

也许你错过了Vista这班列车,想象Vista就像一个可有可无的小角色.而如今,Windows 7来了,几乎可以肯定你会投向Windows 7.如果这样,请使用64位版本的Windows 7.

谁应该使用64位版本?

如果你有Intel Core 2双核处理器,或者是更新一些的CPU,那意味着你拥有一款64位的CPU,这样的话,请使用64位版本Windows 7.(顺便说一句,离微软的最后激活期限还有5天)微软现在也开始向用户推荐使用64位版本系统,就跟一些笔记本厂商向用户推荐64位版本的Vista而不是32位版本的Vista一样.Apple公司的Mac OS 10.6 Snow Leopard在内核上已经是完全意义上的64位系统,64位已经成为了主流.

为甚我们要使用64位Windows 7?
其实主要是因为一个问题,内存.32位版本的Windows最大内存只能支持到3.3GB的内存,而在Windows 64位这个时代,4GB内存是最新的最小标准,使用4GB的内存,你可以完美运行很多程序,而现在内存价格也很便宜.你甚至可以把系统内存扩展到8GB甚至是32GB或者更多.

谁不应该使用64位版本Windows 7?

Spring、Adobe联手推动Java RIA开发

据国外媒体报道,Adobe公司今天宣布,它将与SpringSource公司展开合作,通过融合Flash和Spring平台,来简化富互联网体验的企业级Java应用的开发和部署。

  在近日举行的SpringOne开发者大会上,两家公司宣布了这个合作消息。通过两家公司的合作,Java开发者可以组合使用Adobe Flex工具和企业Java的事实标准——Spring框架,从而更轻松的创建企业级富互联网应用。

  2007年底,Adobe推出了开源项目BlazeDS,通过该项目Adobe公布了其高性能远程控制和短消息技术的源代码。与Adobe合作后,SpringSource将推出一个新开源项目——Spring BlazeDS,实现Spring与BlazeDS的融合,测试版将于12月中旬推出。

  另外在明年年初,两家公司还将合作为Adobe LiveCycle Data Services ES开发一个SpringSource Adapter,实现对Adobe LiveCycle Data Services ES的融合,让开发者可以基于Adobe Flex的实时或近实时解决方案,创建服务器推送应用程序。

Javascript Debug Toolkit 1.0.2版本发布

JSDT-1.0.2版本增加了Javascript Debug Toolkit 透视图 增加在ie和firefox下的错误定位功能 增加查看表达式的功能

其中,错误定位功能只能有IE和FIREFOX下使用。

特别感谢intelchen ,zhuixinjian , sunmingdong ,killjim 几们网友给我提bug.

JSDT(Javascript Debug Toolkit)是一个用于javascript调试的eclipse 插件,用于调试javascript。JSDT可以跨浏览器调试,支持在IE,Firefox,Safari,Chrome等主流浏览器中调试javascript。JSDT支持设置断点,单步调试等调试工具的基本特性。

Ext JS 3.0 线路图和开发工具

Alex Moore强调了Ext JS 社区开发的两个重点。首先,Ext JS线路图 已经更新到了2009年的3.0版本:

新的轻型,高速的核心基础库
Flash图表的API
Ext.Direct -支持远程和数据streaming/comet
更新综合客户服务器的数据绑定/编组
ListView组件
按钮和工具栏组件有所增加
ARIA/Section 508可及性改善
更新CSS的样式重置范围以及更容易定制theming
更新Ext 事件的登录模式
Ext.Ajax的增强

第二,Alex提供了一个链接,可以预览新的Ext JS的视觉开发工具,目前还处于早期发展阶段。

减轻开发工作量的表单数据存储处理方法

本文以Oracle数据库为例,介绍了在采用JSP技术开发WEB应用时一种简便通用的表单数据存储处理方法,以减轻开发工作量,同时提供了主要的程序代码。

引言

J2EE(Java 2 Enterprise Edition)技术已广泛应用在Web应用开发中,其中的JavaBean、Servlet技术为开发者提供了更为清晰的开发环境,使用JSP技术表现页面,使用Servlet技术完成大量的业务处理,使用Bean来存储数据及一些业务处理。在WEB应用中,业务数据存储到数据库中的处理工作经常很繁重,其中一种主要的形式就是表单数据存储到数据库,整个应用处理过程牵涉到大量的这种数据存储操作,对每个表单都要单独编写相应的数据存储程序,花费了开发人员大量的时间和精力。采用什么方法来减轻表单数据存储的开发工作量是值得研究的问题。

两种常见的表单数据存储处理方法

1、对每一表单都编写相应的程序代码

在JSP页面或JavaBean或Servlet中,使用request. getparameter()函数逐一提取表单提交的数据,或编写相应的JavaBean,使用setProperty方法将数据自动取到JavaBean中,然后生成SQL语句(insert,update,delete),最后执行executeupdate()函数完成数据表存储。

如何解决内存溢出的问题

一 调整 虚拟机参数

  二 立即 释放无用的对象

  三 利用序列化和反序列化技术

  下面是具体的代码实现
[code]
   package com.free;
  import java.io.File;

  import java.io.FileInputStream;

  import java.io.FileNotFoundException;

  import java.io.FileOutputStream;

  import java.io.IOException;

  import java.io.ObjectInputStream;

  import java.io.ObjectOutputStream;

  import java.math.BigInteger;

  import java.util.ArrayList;

  import java.util.List;

  /**

  * @author free

  * springcomingagain@gmail.com

  */

  public class OutMemorySolution {

  /***

Struts2框架之的类型转换

下面通过一个简单的例子来描述Struts2的类型转换.
准备如下:

1.在web项目中引入Struts2框架:将相应的Jar包(commons-logging-1.0.4.jar,freemarker-2.3.8.jar,ognl-2.6.11.jar,struts2-core-2.0.11.1.jar,xwork-2.0.4.jar其它的项目中用不上,所以不需要加入)拷贝到项目的WEB-INF/lib/目录中,然后在web.xml进行如下配置:
[code]

xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

index.jsp

如何提高SQL的执行效率

提高SQL执行效率的几点建议:

◆尽量不要在where中包含子查询;

关于时间的查询,尽量不要写成:

where to_char(dif_date,'yyyy-mm-dd')=to_char('2007-07-01','yyyy-mm-dd'); 

◆在过滤条件中,可以过滤掉最大数量记录的条件必须放在where子句的末尾;

FROM子句中写在最后的表(基础表,driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有三个以上的连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表;

◆采用绑定变量

◆在WHERE中尽量不要使用OR

◆用EXISTS替代IN、用NOT EXISTS替代NOT IN;

◆避免在索引列上使用计算:WHERE SAL*12>25000;

◆用IN来替代OR: WHERE LOC_ID=10 OR LOC_ID=15 OR LOC_ID=20

◆避免在索引列上使用IS NULL和IS NOT NULL;

◆总是使用索引的第一个列;

◆用UNION-ALL替代UNION;

如何对Oracle中的数据进行回复

我们给系统创建了两个用户:com和comtest。前者存放的是正式库数据,后者存放的测试库数据。它们都有一个taw_rm_user表,存放了使用该系统的用户基本信息,我就是把其中的password字段全部改成了123456。

DMP备份文件是9月28号创建的,经过十一七天长假后到今天,已经有十几天了,我简单的查了一下日志,发现已经创建了几个新的用户,并且有些旧的用户的其他信息也已经更改了。直接把备份文件中的taw_rm_user表导入com用户下是肯定不行的。经过一段时间的冷静思考后,得到了一个解决方案。大致思路是:

1. 将测试库的taw_rm_user表用CREATE TABLE AS语句导到一个临时的备份表中(测试库中的用户表也不能乱改);

2. 再将taw_rm_user表删除;

3. 然后将DMP备份文件的taw_rm_user表用IMP命令导入到comtest下;

4. 再自己编写一个PL/SQL程序块,通过使用游标循环,将这个新导入的表中的password字段更新到com.taw_rm_user表的对应记录中。注意,这里只更新对应记录,对新加入的用户记录不作任何修改;

5. 再将之前备份的taw_rm_user表恢复到comtest下即可。

其中使用的两段关键语句如下:

针对Oracle的TNS listener的攻击方法例举

首先,根据版本的不同,TNS listener可能较易受到多种类型的缓冲区溢出攻击,这些攻击可以在不提供用户ID和口令的情况下被利用。例如:在oracle 9i中,当客户机请求某个过长的service_name时,很容易受到溢出攻击。当listener为日志构建错误消息之后,service_name的值会被复制到某于栈结构的缓冲区内,从而引起溢出—覆盖保存值将返回栈中的地址。这种做法可以使攻击者获得控制权。事实上,TNS listener曾经有过多次溢出和格式化字符串的漏洞。

其次,另一类攻击和日志文件有关。只有当未给listener设置口令的时候,攻击才会有效。

假设某个listener没有设置口令,攻击方法如下:
[code]
tnscmd -h www.example.com -p 1521 –rawcmd “(DESCRIPTION=(CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=))(COMMAND=log_directory)(ARGUMENTS=4)(SERVICE=LISTENER)(VERSION=1)(VALUE=c:\\)))” 将日志目录设置到C盘

J2ME手机游戏之三:TimerTask与Timer类的应用

Timer类就像一个定时器,用于设置特定的时间或周期,来配合线程动作的执行,但是只调用Timer无法执行线程动作,必须配合另一个类TimerTask的方法才能使用。从示例6-13中可以发现Timer类与Thread类很相近。

public Timer ()
创建一个新的timer对象。

Timer属于计时器类,Time建立后,需要调用schedule()方法来执行计划任务,计划调度的方法有许多运用方式:

public void schedule (TimerTask task, 
    long delay)

执行任务前先等待一段时间。task代表要执行的任务,delay代表需要等待的时间,单位为毫秒(1000毫秒为1秒)。

public void schedule (TimerTask task,
    Date time)

在指定的系统时间time之后开始执行任务。

public void schedule (TimerTask task,
    long delay,
    long period)

对在J2EE中应用系统分层设计的思考

J2EE分层设计是Java企业应用的最基本的设计思想。

从最常规的分层结构来说,系统层次从上到下依次为:

表现层:主要是客户端的展示。

服务层:直接为客户端提供的服务或功能。也是系统所能对外提供的功能。

领域层:系统内的领域活动。

DAO层:数据访问对象,通过领域实体对象来操作数据库。

其中有些指导原则:

1、上层总是依赖其下层,依赖关系不跨层。

2、表现成除外,同一层之间方法不允许相互调用。这是实际开发中一些开发者容易范的错误!如果真是同一层之间存在方法调用,需要注意,这些调用都是一些上层不可见方法,比如一些工具方法等。

3、一切从服务层出发,从系统需要提供的功能进行分析,确定Service接口中的方法。而不是从数据库的表出发,创建DAO,再创Domain,然后Service,这实际上是对系统分层的误解。

4、系统最核心的设计就是将系统中的实体划分为领域模型。在此基础上设计数据的DAO层,并将这些活动暴露给服务层,服务层的实现依赖于领域活动。

5、每个接口的职责范围明确有界。

举例说明如何利用Struts上传多个文件

最近一个基于Struts的项目中要用到上传多张图片到系统中,我在网上找了一下,发现大多数都是转载的例子,对项目的作用不大,故写下了这个例子,希望对有用到的朋友有所帮助。要求JDK1.5以上,lib库要包含如下jar文件:antlr.jar,commons-beanutils.jar,commons-collections.jar,commons-digester.jar,commons-fileupload.jar,commons-logging.jar,commons-validator.jar,jakarta-oro.jar,struts.jar这些都是Struts中的jar文件以及Struts中的标签库文件。

  一:web.xml文件
[code]
  

  

  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

  "http://java.sun.com/dtd/web-app_2_3.dtd">

  

  

J2ME手机游戏之一:Thread类

继承Thread类的子类,可以覆盖Thread类的run()方法,run()方法被看做线程的起点。当要运行Thread时,需要调用start()来执行线程。MIDP Thread API示例6-11中说明线程的应用方法是:

class PrimeThread extends Thread{
        long minPrime;
            PrimeThread(long minPrime){
              This.minPrime=minPrime;
     }
     public void run (){
     …
     }
     }

本段为线程的基本编写方法。但是此时这段内容不会真正执行,需要调用下列方法才会执行。

PrimeThread p = new PrimeThead(143);
    p.start();

示例6-11
[code]/×
Thread线程执行动态画面调用方法
×/
import javax.microedition.midlet.×;
import javax.microedition.lcdui.×;

J2ME手机游戏之二:运行实现Runnable接口的类

使用Runnable接口设计线程动作方法可以由程序直接调用线程内容,它本身要有run()方法。 每个run()也都是一个线程的起始点,必须要由start()启动线程。相关程序代码调用和运行方法为:

class PrimeRun implements Runable{
      long minPrime;
    PrimeRun(long minPrime){
    This.minPrime=minPrime;
    }
    public void run(){
    …
    }
    }

本段为基本的线程编写方法。程序代码本身不会运行这段内容,需要调用下列方法才可以执行线程。

PrimeRun p = new PrimeRun (143);
    new Thread(p).start();

示例6-12
[code]/×
Runnable类运行线程方法
×/
import javax.microedition.midlet.×;
import javax.microedition.lcdui.×;
import java.util.×;

页面

订阅 JAVA技术网 RSS