QQK's profileQQK的空间BlogListsNetwork Tools Help

QQK

Occupation
Location
Interests
This person's network is empty (or maybe they're keeping it private).

QQK的空间

April 15

C/S 与 B/S 区别

C/S 与 B/S 区别
Client/Server是建立在局域网的基础上的,Browser/Server是建立在广域网的基础上的。
(1)、硬件环境不同:
C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务。
B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例如电话上网, 租用设备, 信息自己管理, 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行。
(2)、对安全要求不同
C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强。 一般高度机密的信息系统采用C/S 结构适宜,可以通过B/S发布部分可公开信息。
B/S 建立在广域网之上, 对安全的控制能力相对弱, 面向是不可知的用户群。
(3)、对程序架构不同
C/S 程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑。
B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上。 比C/S有更高的要求,B/S结构的程序架构是发展的趋势,从MS的.Net系列的BizTalk 2000 Exchange 2000等,全面支持网络的构件搭建的系统。SUN和IBM推的JavaBean构件技术等,使B/S更加成熟。
(4)、软件重用不同
C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好。
B/S 对的多重结构,要求构件相对独立的功能。 能够相对较好的重用。就如买来的餐桌可以再利用,而不是做在墙上的石头桌子。
(5)、系统维护不同
系统维护是软件生存周期中,开销大,相当重要
C/S 程序由于整体性,必须整体考察,处理出现的问题以及系统升级难, 可能是再做一个全新的系统。
B/S 构件组成方面构件个别的更换,实现系统的无缝升级。 系统维护开销减到最小,用户从网上自己下载安装就可以实现升级。
(6)、处理问题不同
C/S 程序可以处理用户面固定,并且在相同区域, 安全要求高的需求,与操作系统相关, 应该都是相同的系统。
B/S 建立在广域网上, 面向不同的用户群,分散地域, 这是C/S无法作到的,与操作系统平台关系最小。
(7)、用户接口不同
C/S 多是建立在Window平台上,表现方法有限,对程序员普遍要求较高。
B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流, 并且大部分难度减低,降低开发成本。
(8)、信息流不同
C/S 程序一般是典型的中央集权的机械式处理,交互性相对低。
B/S 信息流向可变化, B-B、 B-C、 B-G等信息流向的变化, 更象交易中心
参考资料:http://zhidao.baidu.com/question/12962713.html

使用myeclipse集成struts,hibernate,spring的一个示例程序

使用myeclipse集成struts,hibernate,spring的一个示例程序(2008-04-14 16:17:27)

标签:it

在java 企业应用领域,ejb的功能强大同ejb的配置复杂,难于学习一样出名。但在以前我们又有什么办法呢?只有硬着头皮来学ejb。真有点“明知山有虎,偏向虎山行”的精神。现在形式有了乐观的变化,java开源的持续走红,使得开发java企业级应用不再局限于ejb领域。这里我主要介绍一下怎样采用开源的 Spring,Hibernate以及Struts构建一个轻量级的架构。

一、整体架构介绍

在软件工程领域,为了降低模块耦合度,提高模块的可重用性,分层一直是广为采纳的一个方法。其实分层还可以使开发人员专注于某一层进行开发,使得软件开发的分工变细,提高生产效率(这一点上堪比福特发明的流水线生产汽车的做法,各个工人负责特定部件的生产,最后组装)。

一个企业级的java应用,通常分为以下几层:UI层,业务逻辑层,数据持久层,域对象层。下面对这几层分别作简要介绍:

1. UI层:负责与用户交互,包括:接受用户的请求,把处理结果返回给用户。这里我们采用struts来UI层,虽然比起Tapestry以及JSF这些事件驱动的表现层技术而言,Struts的设计显得有些老土,但它目前仍是表现层事实上的标准,所以我们还是选用它。

2.业务逻辑层:主要负责具体的业务处理。通过Spring的IOC以及AOP实现各个功能的耦合相连

3.数据持久层:主要负责与底层的数据库打交道。这里我们采用Spring封装的Hibernate操作来简化实际的编码。主要的操作为CRUD(create ,read,update,delete)

4.域对象层:具体的实体类,如老师,学生等等这些具体的类(注意:需要与数据库中的某一标对应)。
以上只是简单介绍了各个层的划分以及各层所对应的开源框架,要详细了解各层的具层信息,需要访问 struts,hibernate,spring的官方网站。

二、实例分析

实例说明:一个网站登录的例子,比较简单,但能说明各层是如何协调工作的。

工具:jdk1.5,eclipse3.2,myeclipse5.0GA,mysql5.0,tomcat5.5,至于这几个工具到底该怎么装这里我就不多说了,大家不清楚的可以到网上搜搜。下面是具体操作步骤:

预备工作:用mysql创建一个test数据库,再创建一个user表,再创建两个字段username和password。脚本如下

DROP DATABASE IF EXISTS `test`;
CREATE DATABASE `test`
USE `test`;

CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(30) NOT NULL default '',
`password` varchar(30) default '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

打开myeclipse的database explore透视图

右键单击左侧的空白区域 ,点击 new 按钮

单击“configure database driver”来配置数据库的驱动,你必须有mysql的jdbc驱动,没有的到mysql的官方网站上下载。

测试数据库配置是否成功。

1. 新建一个myeclipse的web工程

2. 引入Spring包

右键工程名

注意:这里为了省得以后再添加spring的相关包,所以一次性的选中了所有的包。选中Copy选项,它会把这些包拷贝到/WebRoot/WEB-INF/lib目录下,方便以后的实际部署。

3.添加hibernate包

系统会检测到该工程已经添加了Spring包,选择使用Spring的配置文件

点击 next

点击 next

点击 next

最后点击Finish按钮即可。

4切换到database explore视图,右键 点击 user 表的“Hibrnate Reverse Engineering”

弹出如下窗口

点击 “next”

再单击finish

在包视图中 可以看到 src下多了一个名为vo的package以及该包下的四个文件

为了更加直观地显示分层,我另建了一个名为dao的package,并把UserDAO.java移到dao中

同时注意在applicationContext.xml中把对UserDAO的引用部分也作相应修改。

5. 建立业务逻辑层代码

新建一个名为service的包,再在里面建立一个Service类,代码如下

package service;
import java.util.List;
import vo.User;
import dao.UserDAO;
public class Service {
private UserDAO userDao;
public UserDAO getUserDao() {
return userDao;
}
public void setUserDao(UserDAO userDao) {
this.userDao = userDao;
}
public boolean isValid(User user) {//判断用户是否合法
List result = userDao.findByExample(user);
if (result.size() > 0)
return true;
else
return false;
}
}

同时在applicationContext.xml中添加如下配置
<bean id="service" class="service.Service" singleton="false">
<property name="userDao">
<ref bean="userDao" />
</property>
</bean>

6.配置UI层

添加struts包,方法同添加spring一样

配置struts-config.xml文件,在空白区域右键单击 new 一个 action ,actionForm ,jsp

下一步

对forward作设置,增加succeed转到welcome.jsp,fail转到login.jsp

在WebRoot目录下建立一个welcome.jsp文件,显示用户登录成功后的欢迎信息。

6. 把struts和spring连接起来

6.1修改struts-config.xml注意红色字体部分

<action
attribute="loginForm"
input="/login.jsp"
name="loginForm"
path="/login"
scope="request"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="fail" path="/login.jsp" />
<forward name="succeed" path="/welcome.jsp" />
</action>

再在strut-config.xml中添加如下代码

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" />
</plug-in>>
6.2修改applicationContext,增加以下内容
<bean name="/login" class="web.action.LoginAction"
singleton="false">
<property name="service">
<ref bean="service" />
</property>
</bean>

6.3修改LoginAction.java部分代码,增加一个service变量,以及其 get/set方法(主要用于Spring IOC)。代码如下:

package web.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import web.form.LoginForm;
import service.Service;
import vo.User;
public class LoginAction extends Action {
private Service service;
public void setService(Service service) {
this.service = service;
}
public Service getService() {
return service;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method
// stub
User user = new User();
user.setPassword(loginForm.getPassword());
user.setUsername(loginForm.getUserName());
if (service.isValid(user))
return mapping.findForward("succeed");
else
return mapping.findForward("fail");
}
}

至此一个简单的登录已经做成。剩下的工作就是打包并发布你的应用了。

二、实例分析
实例说明:一个网站登录的例子,比较简单,但能说明各层是如何协调工作的。
工具:jdk1.5,eclipse3.2,myeclipse5.0GA,mysql5.0,tomcat5.5,至于这几个工具到底该怎么装这里我就不多说了,大家不清楚的可以到网上搜搜。下面是具体操作步骤:
预备工作:用mysql创建一个test数据库,再创建一个user表,再创建两个字段username和password。脚本如下
DROP DATABASE IF EXISTS `test`;
CREATE DATABASE `test`
USE `test`;
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(30) NOT NULL default '',
`password` varchar(30) default '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
打开myeclipse的database explore透视图

右键单击左侧的空白区域 ,点击 new 按钮

单击“configure database driver”来配置数据库的驱动,你必须有mysql的jdbc驱动,没有的到mysql的官方网站上下载。

测试数据库配置是否成功。
1.   新建一个myeclipse的web工程

2.   引入Spring包
右键工程名


注意:这里为了省得以后再添加spring的相关包,所以一次性的选中了所有的包。选中
Copy选项,它会把这些包拷贝到/WebRoot/WEB-INF/lib目录下,方便以后的实际部署。

3.添加hibernate包

系统会检测到该工程已经添加了Spring包,选择使用Spring的配置文件

点击 next

点击 next

点击 next

最后点击Finish按钮即可。
4切换到database explore视图,右键 点击 user 表的“Hibrnate Reverse Engineering”

弹出如下窗口

点击 “next”

再单击finish
在包视图中 可以看到 src下多了一个名为vo的package以及该包下的四个文件

为了更加直观地显示分层,我另建了一个名为dao的package,并把UserDAO.java移到dao中

同时注意在applicationContext.xml中把对UserDAO的引用部分也作相应修改。
5.   建立业务逻辑层代码
新建一个名为service的包,再在里面建立一个Service类,代码如下

 

package service;
import java.util.List;
import vo.User;
import dao.UserDAO;
public class Service {
private UserDAO userDao;
public UserDAO getUserDao() {
return userDao;
}
public void setUserDao(UserDAO userDao) {
this.userDao = userDao;
}
public boolean isValid(User user) {//判断用户是否合法
List result = userDao.findByExample(user);
if (result.size() > 0)
return true;
else
return false;
}
}


同时在applicationContext.xml中添加如下配置
<bean id="service" class="service.Service" singleton="false">
<property name="userDao">
<ref bean="userDao" />
</property>
</bean> 

6.配置UI层
添加struts包,方法同添加spring一样

配置struts-config.xml文件,在空白区域右键单击 new 一个 action ,actionForm ,jsp



下一步
对forward作设置,增加succeed转到welcome.jsp,fail转到login.jsp
在WebRoot目录下建立一个welcome.jsp文件,显示用户登录成功后的欢迎信息。

6. 把struts和spring连接起来
6.1修改struts-config.xml注意红色字体部分

 

<action
attribute="loginForm"
input="/login.jsp"
name="loginForm"
path="/login"
scope="request"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="fail" path="/login.jsp" />
<forward name="succeed" path="/welcome.jsp" />
</action>


再在strut-config.xml中添加如下代码

 

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" />
</plug-in>>
6.2修改applicationContext,增加以下内容
<bean name="/login" class="web.action.LoginAction"
singleton="false">
<property name="service">
<ref bean="service" />
</property>
</bean>


6.3修改LoginAction.java部分代码,增加一个service变量,以及其 get/set方法(主要用于Spring IOC)。代码如下:

 

package web.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import web.form.LoginForm;
import service.Service;
import vo.User;
public class LoginAction extends Action {
private Service service;
public void setService(Service service) {
this.service = service;
}
public Service getService() {
return service;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method
// stub
User user = new User();
user.setPassword(loginForm.getPassword());
user.setUsername(loginForm.getUserName());
if (service.isValid(user))
return mapping.findForward("succeed");
else
return mapping.findForward("fail");
}
}


至此一个简单的登录已经做成。剩下的工作就是打包并发布你的应用了

SSH框架

SSH框架

最近在弄j2ee,发现还是学到了很多东西,心情happy啊!昨天看到了一个文章是关于ssh的,就弄下来了,后面加点自己的东西,很感谢网上的各位前辈的总结。一个spring2.5+hibernate3.2+struts2.0组合框架,使用spring的IoC来管理应用的所有bean,包括struts2的action,充分发挥了spring轻量级框架的优势。
摘 要:针对当前Web应用程序开发面临的问题,结合目前比较流行的开源框架Spring、Struts和Hibernate,提出了一种开发J2EE Web应用的轻量级解决方案,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。并且,通过案例具体说明了如何将这一方案应用到实际项目中。
关键词:J2EE MVC Struts Spring Hibernate
    大型企业级Web应用系统的开发通常要求有一个良好的软件架构、便于协作开发和扩展升级,而传统的开发模式不能很好地满足这些要求。本文针对当前Web应用程序开发面临的问题,结合目前比较流行的开源框架SSH(Spring、Struts、Hibernate),提出一种开发J2EE 企业级Web应用的轻量级解决方案,并通过案例具体说明如何将这一方案应用到实际项目中。
1 框架技术
    著名的软件大师Ralph Johnson对框架(Framework)进行了如下的定义: 框架是整个系统或系统的一部分的可重用设计,由一组抽象的类及其实例间的相互作用方式组成[1]。
    框架一般具有即插即用的可重用性、成熟的稳定性以及良好的团队协作性。J2EE复杂的多层结构决定了大型的J2EE项目需要运用框架和设计模式来控制软件质量。目前,市场上出现了一些商业的、开源的基于J2EE的应用框架,其中主流的框架技术有:基于MVC模式的Struts框架和基于IoC模式的Spring框架以及对象/关系映射框架Hibernate等。
1.1 表示层框架Struts
     Struts是一个在JSP Model2基础上实现的MVC框架,主要分为模型(Model)、视图(Viewer)和控制器(Controller)三部分,其主要的设计理念是通过控制器将表现逻辑和业务逻辑解耦,以提高系统的可维护性、可扩展性和可重用性[2]。Struts框架的体系结构如图1所示。

  下面就图1所示的体系结构图分析Struts框架中的MVC组件。
    (1)视图:视图部分主要由JSP页面组成,其中没有流程逻辑、业务逻辑和模型信息,只有标记。Struts自身包含了一组标记库(TagLib),这也是Struts的精华之一,灵活运用它们可以简化JSP页面的代码,提高开发效率。
    (2)控制器:Struts中的Controller主要是其自身提供的ActionServlet。ActionServlet接收所有来自客户端的请求并根据配置文件(struts-config.xml)中的定义将控制转移到适当的Action对象。
    (3)模型:Struts没有定义具体Model层的实现,Model层通常是和业务逻辑紧密相关的,有持续化的要求。目前在商业领域和开源世界,都有一些优秀的工具可以为Model层的开发提供便利。
1.2 业务逻辑层框架Spring
     Spring是一个解决了许多J2EE开发中常见问题并能够替代EJB技术的强大的轻量级框架。这里所说的轻量级指的是Spring框架本身,而不是指Spring只能用于轻量级的应用开发。Spring的轻盈体现在其框架本身的基础结构以及对其他应用工具的支持和装配能力。与EJB这种庞然大物相比,Spring可使程序研发人员把各个技术层次之间的风险降低。
     Spring框架的核心是控制翻转IoC(Inversion of Control)/依赖注入DI(Dependence Injection)机制。IoC是指由容器中控制组件之间的关系(这里,容器是指为组件提供特定服务和技术支持的一个标准化的运行时的环境)而非传统实现中由程序代码直接操控,这种将控制权由程序代码到外部容器的转移,称为“翻转”[3]。DI是对IoC更形象的解释,即由容器在运行期间动态地将依赖关系(如构造参数、构造对象或接口)注入到组件之中[3]。Spring采用设值注入(使用Setter方法实现依赖)和构造子注入(在构造方法中实现依赖)的机制,通过配置文件管理组建的协作对象,创建可以构造组件的IoC容器。这样,不需要编写工厂模式、单例模式或者其他构造的方法,就可以通过容器直接获取所需的业务组件。Spring框架的结构如图2所示。

  Spring框架由七个定义明确的模块组成,且每个模块或组件都可以单独存在,或者与其他一个或多个模块联合实现。Spring Core Container是一个用来管理业务组件的IoC容器,是Spring应用的核心;Spring DAO和Spring ORM不仅提供数据访问的抽象模块,还集成了对Hibernate、JDO和iBatis等流行的对象关系映射框架的支持模块,并且提供了缓冲连接池、事务处理等重要的服务功能,保证了系统的性能和数据的完整性;Sprnig Web模块提供了Web应用的一些抽象封装,可以将Struts、Webwork等Web框架与Spring整合成为适用于自己的解决方案。
    Spring框架可以成为企业级应用程序一站式的解决方案,同时它也是模块化的框架,允许开发人员自由地挑选适合自己应用的模块进行开发。Spring框架式是一个松耦合的框架,框架的部分耦合度被设计为最小,在各个层次上具体选用哪个框架取决于开发者的需要。
1.3 数据持久层框架Hibernate
    O/R mapping技术是为了解决关系型数据库和面向对象的程序设计之间不匹配的矛盾而产生的。Hibernate是目前最为流行的O/R mapping框架,它在关系型数据库和Java对象之间做了一个自动映射,使得程序员可以以非常简单的方式实现对数据库的操作。Hibernate工作原理如图3所示。

  Hibernate通过对JDBC的封装,向程序员屏蔽了底层的数据库操作,使程序员专注于OO程序的开发,有助于提高开发效率。程序员访问数据库所需要做的就是为持久化对象编制xml映射文件[4]。
     底层数据库的改变只需要简单地更改初始化配置文件(hibernate.cfg.xml或者hibernate.properties)即可,不会对应用程序产生影响。
     Hibernate有自己的面向对象的查询语言HQL,HQL功能强大,支持目前大部分主流的数据库,如Oracle、DB2、MySQL、Microsoft SQL Server等,是目前应用最广泛的O/R映射工具。Hibernate为快速开发应用程序提供了底层的支持。
2 基于SSH组合框架的Web应用模型设计与实现
2.1 集成SSH的新型J2EE框架
  前面分析了基于J2EE的三种框架技术,下面通过集成以上三种框架技术来对传统的J2EE Web开发模型加以改进,以形成一种新的、轻量型的J2EE架构。
  集成SSH框架的系统框架图如图4所示,系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,利用Hibernate框架对持久层提供支持,业务层用Spring支持。具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO接口,并给出Hibernate的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后由Spring完成业务逻辑。

  系统的基本业务流程是: 在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件(struts-config.xml)将ActionServlet接收到的Request委派给相应的Action处理。在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。而在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。
  采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。
2.2 基于SSH框架的Web应用系统的实现
  下面将通过一个实际的系统来展示如何进行基于SSH框架的Web应用开发。该系统是为某通信公司运营部开发的一个问答式系统,功能类似于百度知道和新浪爱问。由于系统的模块较多,下面就以一个用户管理模块为例来说明系统的开发实现过程,并将按照数据持久层、业务逻辑层、表示层的顺序说明系统构建过程。
  (1)数据持久层
  数据持久层由Java对象持久化类和数据访问对象(DAO)组成。每个数据库表都对应着一个持久化对象,这样就给予了开发者使用OO思想设计和开发的便利,同时也屏蔽了具体的数据库和具体的数据表、字段,消除了对数据库操作的硬编码在重用性上的弊端。用户信息表的部分结构如表1所示。

  Hibernate通过映射(Mapping)文件将对象(Object)与关系型数据(Relational)相关联,因此需要编写和数据库表相对应的Java持久化类以及对应的映射文件。有了Java持久化类后就可以在此基础上实现数据访问类。在Spring框架中,数据访问类可以从辅助类HibernateDaoSupport继承,这极大地方便了Hibernate框架在Spring中的使用,相应的部分代码如下:
     public class UserDao
          extends HibernateDaoSupport {
       public int add(User user) {
         return Integer.ParseInt(this.getHibernateTemplate().save(user).toString());
       }
       public List findAll() {
         return this.getHibernateTemplate().loadAll(User.class);
       }
     }
  具体的Hibernate数据源、session工厂、事务管理、缓冲连接池等功能都由业务层的Spring容器提供。
  (2)业务逻辑层
  业务逻辑层由Spring框架支持,提供了处理业务逻辑的服务组件。开发者需要对业务对象建模,抽象出业务模型并封装在Model组件中。由于数据持久层实现了Java持久化类并且封装了数据访问对象(DAO),因此可以在Model组件中方便地调用DAO组件来存取数据。Spring的IoC容器负责统一管理Model组件和DAO组件以及Spring所提供的事务处理、缓冲连接池等服务组件。
  在用户管理模块中,通过业务建模创建了用户模型UserService类,封装了对用户的权限管理以及积分管理等功能。UserService类通过调用数据访问类UserDao实现对用户数据的操作。这些组件的关系将通过配置Spring框架的applicationContext.xml联系起来,配置文件的主要内容如下:

     (3)表示层
     表示层结合JSP和Struts的TagLib库处理显示功能,利用ActionServlet将请求(*.do)映射到相应的Action,并由Action调用业务逻辑的服务组件,然后根据处理结果跳转到Forword对象指定的响应页面。
     业务流程的部署由struts-config.xml完成。下面以一个显示所有用户信息的请求(ListUser.do)为例来说明配置文件的使用。

    基于J2EE的Web应用以其层次性、平台无关性的优势已经逐渐成为了电子商务、电子政务主要的解决方案。本文针对传统的J2EE Web应用开发的弊端,提出了一种利用轻量级框架来快速搭建Web应用的解决方案,并且通过其在实际项目中的应用,证明了采用此方案可以帮助开发人员在短时间内建立结构清晰、可重用性好、维护扩展方便的Web应用程序。
参考文献
[1] GAMMA E, HELM R, JOHNSON R, et al. Design patterns:Elements of reusable object-oriented software[m]. Addison Wesley, 1994.
[2] 孙卫琴.精通Struts:基于MVC的Java Web设计与开发[m]. 北京:电子工业出版社,2004.
[3] JOHNSON R, HOELLER J, ARENDSEN A, et al. Java/J2EE application framework reference document. V1.1.
2004.
[4] 徐长盛,戴超.一种快速开发Web应用程序方法的研究[J]. 计算机工程与设计,2004,(12):2237-2239.
[5] 夏昕,曹晓钢,唐勇.深入浅出Hibernate[m]. 北京:电子工业出版社,2005.
[6] JOHNSON R.Expert one-on-one J2EE design and development[m]. 魏海萍译.北京:电子工业出版社,2003.
在用ssh开发web应用时,需要对生成的各个类文件进行组织,下面就对一个可行的目录方案进行介绍:
譬如应用中有一个用户管理模块,则在公共包下建立一个user包,如该公共包可以为com.simon.oa,
在user包下包括如下子包
1、controler包
该包放置各种struts的action。
2、dao包
该包放置各类dao(data access object),也就是放置对数据库访问的实现类,在用myeclipse中的“Hibernate Reverse Engineering”进行反向操作时在某一个目录中就会生成对应某个表的DAO,生成后可将该DAO拖到dao包中。在某些应用中将DAO作为接口,在该接口中包括所有对数据库的操作方法,然后在dao包建立一个hibernate包,在hibernate包中放置对DAO接口的实现,譬如:UserDAO接口有一个实现类为UserDaoImpl,将该类放置到hibernate包中,实际的开发倾向于后一种方式,因为对这个DAO接口可以实现spring的IoC操作。(不知道myeclipse对此是怎么考虑的,这个问题让我纠缠了很久,误将DAO理解成一个能够进行实际操作的类,而不是一个接口,以后开发要注意)
3、model包
该包中放置hibernate反向工程生成的bean和该bean对应的.hbm.xml文件。
4、service包
该包放置业务操作类,譬如用户服务类,一般情况将该用户操作类提取一个接口,然后在service包下生成一个impl包,在impl包中才放置用户操作接口的实现类。该用户接口实现类中调用DAO接口对数据库进行操作,而调用该实现类的方法在struts的action中。
5、vo包(value object)
vo包中的中包括struts中使用的POJO及actionform等信息。
VO: Value Object
DTO: Data Transfer Object
个人理解VO和DTO是类似的东西,原则上VO和DTO只有Public Fields,主要用于进程之间数据传递的问题,VO和DTO不会传递到表示层,在业务层就会被吸收。但看到很多人在建立VO和DTO时,也含有Setter,Getter属性和一些其它的辅助方法,这也无可厚非,我自己也不能确定这对不对。

转载:http://hi.baidu.com/ashinehan/blog/item/ac42af0ba15eb336b0351d37.html

March 27

China and Tibet

China and Tibet

中国和西藏

Rejoice, damn you

欢庆,去你妈的

Mar 25th 2009 | BEIJING
From The Economist print edition

China prepares to mark a dangerous anniversary in Tibet, amid claims of thuggery last year

这是去年中国在西藏举行了一次危险的周年纪念活动,暴行充斥。

IT’S official: “Tibet has moved from darkness to light, poverty to affluence, dictatorship to democracy and seclusion to opening up.” So proclaims the notice at an exhibition in Beijing marking the 50th anniversary of Tibet’s “democratic reforms”. To celebrate, officials in Tibet have designated Saturday March 28th as Serf Liberation Day. Lest anyone not share the mood of rejoicing, security will be tightened, dissidents kept behind bars and foreigners firmly steered away from the region.

官方声称:”西藏已经从黑暗走向光明,从贫穷走向富足,从独裁走向民主,从与世隔绝走向开放。”这项声明来自在北京举行的西藏“民主改革”50周年展览会上。为了表示庆祝,西藏的官员将3月28日设定为解放日。为了防止有人不参与到这样的欢庆活动中来,安全措施被加强了,反对者被监禁在狱中,外国人坚决的避退出了这片区域。

With grim determination the authorities are trying to manufacture joy. The streets of Lhasa, Tibet's capital, have been bedecked with floral displays. The official media are replete with stories of happy Tibetans. In Beijing, the Tibet exhibition aims to show how the region has flourished since coming under Communist rule in 1959 after “centuries of slavery and suppression”. Pride of place goes to a diorama showing former serfs merrily chucking “feudal documents” into a crackling fire.

当权者以其令人不快的决心试图营造欢乐的气氛。西藏首都,拉萨街头被花朵装饰一新。官方的媒体充斥着对幸福西藏人的报道。在北京,西藏展目力图展示自1959年接受共产党统治后这一地区结束了“几个世纪的奴役和镇压”发展得繁荣昌盛。展览最为得意之处在于一副描绘了从前的农奴欢欣鼓舞的将“封建统治的凭证”投入到火中烧掉的透视画。

Chinese officials say 90% of more than 1m people living in Tibet were “serfs” until China dissolved the pro-Dalai Lama Tibetan government on March 28th 1959, and began handing out aristocratic and monastic land to farmers and nomads. The exhibition includes instruments supposedly used to torture serfs before the uprising was crushed. The Indian-based Tibetan government-in-exile calls China’s description of the brutality and abject poverty of Tibetan serfdom a “big lie”.

中国官方声称在1959年3月28日解散前达赖喇嘛西藏政府并将贵族和寺院占有的土地分发给农民和流浪真之前西藏的一千多万人中有90%的人是“农奴”。展览包括了在在暴动镇压前在想象中对农奴施以酷刑的器具。在印度建立的西藏流亡政府将中国对残酷和极度贫困的农奴制的形容称之为“一个大的谎言”。

Just in case, back in Lhasa, troops are still patrolling the streets following an outbreak of rioting in March last year. They are also on full alert across the Tibetan plateau amid fears that Tibetans might stage their own commemorations. Many associate March 1959 not with liberation but with Tibet’s failed uprising against China and the flight of the Dalai Lama to India. Dozens of Tibetan monks have been detained in Ragya, a remote town in neighbouring Qinghai province, after violent protests there on March 21st triggered by the disappearance of a colleague who had raised a pro-independence flag.

在拉萨,为以防万一,自去年三月发生的暴动以来军队一直维持巡街。他们同样对西藏平原保持高度警惕,唯恐西藏人举行自己的纪念活动。许多人并不把1959年三月的事件同解放相联系,而是西藏对抗中国起义的失败和达赖喇嘛抗争出走印度的失败。在武装抗争被一位举旗后消失不见的同僚挑起后几十个西藏的僧侣被扣押在青海省一个僻远的小镇Ragya里。

As the anniversary approaches, China is in no mood to take chances. Alarmed by last year’s widespread unrest in Tibetan-inhabited areas, the government is waging offensives on all fronts. Chinese pressure prompted the South African government to deny a visa to the Dalai Lama who had been due to take part in a conference of fellow Nobel peace prize winners in Johannesburg. The organisers—South Africa’s football authorities—responded by postponing the event indefinitely.

当周年纪念来临之际,中国无意去冒险。受到去年在藏民居住地广泛传播的动荡的警示,政府与各方面的进攻势力斗争。中国强迫南非政府拒签达赖喇嘛为的是使达赖不能出席在Johannesburg举行的诺贝尔奖获得者集会。举办者-南非足球部门-答复将这一事件无限期推延。

YouTube, an internet video-sharing site, also looks like a possible victim. Access to it has been blocked in China since shortly after the Tibetan government-in-exile released video (see the image above) purporting to show Tibetan protesters being beaten by Chinese police. No such slur is permitted in Beijing. Officials say that the images and voices in the video were pieced together from a variety of sources, and thus it is “a lie”. The cause of human rights in Tibet, says an exhibition brochure, has made “remarkable progress”.

YouTube,一个英特网视频共享网站,同样被视为一个潜在的危害。在西藏流亡政府发布了一个关于西藏抗议者被中国警察殴打的视频后立刻被屏蔽。在北京这样的诋毁是不允许的。官方声称视频中的图像和声音是从许多地方截取并拼接在一起的,因此这是“一个谎言”。在一本展览会的小册子中这样提到,西藏人权已经有了”显著进步“。

March 21

How China sees the world

The new world order

世界新次序
How China sees the world

中国怎么看世界
Mar 19th 2009
From The Economist print edition
And how the world should see China

与此同时,世界应当怎样看待中国
IT IS an ill wind that blows no one any good. For many in China even the buffeting by the gale that has
hit the global economy has a bracing message. The rise of China over the past three decades has been
astonishing. But it has lacked the one feature it needed fully to satisfy the ultranationalist fringe: an
accompanying decline of the West. Now capitalism is in a funk in its heartlands. Europe and Japan,
embroiled in the deepest post-war recession, are barely worth consideration as rivals. America, the
superpower, has passed its peak. Although in public China’s leaders eschew triumphalism, there is a
sense in Beijing that the reassertion of the Middle Kingdom’s global ascendancy is at hand (see article).

这是一阵让任何人都感到不适的恶风。在中国许多被这伤及全球经济的风暴所撼动的人得到一个鼓舞人心的消息。中国在过去三十年的崛起令人惊讶。但是它缺乏一个很必须的特征去满足民族极端主义:与西方世界相伴的衰退。现在资本主义在它的核心地带感到畏缩害怕。被卷入最深的战前危机欧洲和日本,勉强有价值被称为竞争对手。拥有超级实力的美国已经过了它的顶峰。尽管在公众面前中国领导人避免去提到中国必胜,但在北京能感受到中华帝国再掌全球霸权的主张。
China’s prime minister, Wen Jiabao, no longer sticks to the script that China is a humble player in world
affairs that wants to focus on its own economic development. He talks of China as a “great power” and
worries about America’s profligate spending endangering his $1 trillion nest egg there. Incautious
remarks by the new American treasury secretary about China manipulating its currency were dismissed
as ridiculous; a duly penitent Hillary Clinton was welcomed in Beijing, but as an equal. This month saw an
apparent attempt to engineer a low-level naval confrontation with an American spy ship in the South
China Sea. Yet at least the Americans get noticed. Europe, that speck on the horizon, is ignored: an EU
summit was cancelled and France is still blacklisted because Nicolas Sarkozy dared to meet the Dalai
Lama.

中国国家总理温家宝不再坚持中国并不擅长世界事务而仅仅只注重于自己的经济发展。他现在称中国为“强国”并担心美国花销太大会危及他在那一万亿的储备金。新的美国财政部部长无意的提及的中国已经解除对货币操纵的言论被认为是荒谬的;有些悔过的希拉里克林顿被欢迎到北京去,但是是作为对手的身份。在本月中国明显策划了一起在中国南海区域与美国间谍船的低等级海军军事对抗。这至少引起了美国的关注。欧洲,地平线上的斑点,被忽略了:一次欧盟高级会议被取消,并且法国因为尼古拉斯萨科奇大胆访问达赖喇嘛仍在黑名单之列。

Already a big idea has spread far beyond China: that geopolitics is now a bipolar affair, with America and
China the only two that matter. Thus in London next month the real business will not be the G20 meeting
but the “G2” summit between Presidents Barack Obama and Hu Jintao. This not only worries the
Europeans, who, having got rid of George Bush’s unipolar politics, have no wish to see it replaced by a
Pacific duopoly, and the Japanese, who have long been paranoid about their rivals in Asia. It also seems
to be having an effect in Washington, where Congress’s fascination with America’s nearest rival risks
acquiring a protectionist edge.

现在一个伟大的构想已经在遥远的中国传播开来:地缘政治现在已经两极化,只有美国和中国。因此下月在伦敦真正的交易将不是20国既集团会议而是而是胡锦涛和奥巴马的两人高级会议。这不仅让对布什的单极主义做好准备的欧洲感到担忧,他们不愿看到单极主义的政策被一个横越太平洋的双头寡头所取代,同样担忧的还有长期对它在亚洲的对手持有妄想态度的日本。这似乎对华盛顿也产生影响,在那里议会着迷于与美国实力接近的竞争对手要冒着遭受贸易保护主意的风险。
Reds under the bed

床下的赤色革命
Before panic spreads, it is worth noting that China’s new assertiveness reflects weakness as well as
strength. This remains a poor country facing, in Mr Wen’s words, its most difficult year of the new
century. The latest wild guess at how many jobs have already been lost—20m—hints at the scale of the
problem. The World Bank has cut its forecast for China’s growth this year to 6.5%. That is robust
compared with almost anywhere else, but to many Chinese, used to double-digit rates, it will feel like a
recession. Already there are tens of thousands of protests each year: from those robbed of their land for
development; from laid-off workers; from those suffering the side-effects of environmental despoliation.

在恐慌传播之前,值得一提的是中国新的自信在表现出其力量的同时也显示出了它的弱点。在温总理的话语中中国依然是一个贫穷的国家并且面对着新世纪以来最困难的一年。最新的对中国工作情况的猜测表明有两千万的岗位被缩减,这暗示中国目前问题的级别。世界银行已经将中国今年的经济增长预测调低到6.5%与大部分其他地区相比这是一个强健的增长,但对增长速度通常处于两位数的许多中国人来说,这感觉像是一个衰退。每年都会出现数以万计的抗议:来自土地被强征用作开发的人们,来自被解雇的工人,来自遭受环境受到掠夺后副作用的人们。
Even if China magically achieves its official 8% target, the grievances will worsen.
Far from oozing self-confidence, China is witnessing a fierce debate both about its economic system and
the sort of great power it wants to be—and it is a debate the government does not like. This year the
regime curtailed even the perfunctory annual meeting of its parliament, the National People’s Congress
(NPC), preferring to confine discussion to back-rooms and obscure internet forums. Liberals calling for
greater openness are being dealt with in the time-honoured repressive fashion. But China’s leaders also
face rumblings of discontent from leftist nationalists, who see the downturn as a chance to halt marketoriented
reforms at home, and for China to assert itself more stridently abroad. An angry China can veer
into xenophobia, but not all the nationalist left’s causes are so dangerous: one is for the better public
services and social-safety net the country sorely needs.

即使中国奇迹般的达到了官方宣称的8%的经济增长率,抱怨和不满将变本加厉。在显露出的自信的另一端,中国正经历着一场激烈的关于其经济系统和它应具备何种力量的讨论,这种讨论是政府不喜看到的。今年政府甚至简化了它敷衍草率的年度会议,十七届全国人民代表大会,将讨论限制在密室进行,并互联网论坛的讨论含糊对待。呼吁开放透明的自由主义者被处以一种由来已久的镇压的方式。但中国的领导人同样面对了来自左翼民族主义者的大量不满,他们视目前的经济低迷期为停止对内自由市场化改革并对外显示中国强硬的机会。一个愤怒的中国会变得仇视外国,但并不是所有的左翼民族主义者都这么危险:一项建议是建立更好的公共服务和这个国家强烈需要的社会安全网。
So China is in a more precarious situation than many Westerners think. The world is not bipolar and may
never become so. The EU, for all its faults, is the world’s biggest economy. India’s population will
overtake China’s. But that does not obscure the fact that China’s relative power is plainly growing—and
both the West and China itself need to adjust to this.

所以很多西方人认为中国处于一个不稳定的状况。世界不是两极的,并且永远也不会是。欧盟,尽管有缺点,是世界上最大的经济体。印度的人口将会超过中国。但中国相对力量明显增长的事实不容忽视,西方和中国自己都需要去适应这一点。
For Mr Obama, this means pulling off a difficult balancing act. In the longer term, if he has not managed
to seduce China (and for that matter India and Brazil) more firmly into the liberal multilateral system by
the time he leaves office, then historians may judge him a failure. In the short term he needs to hold
China to its promises and to scold it for its lapses: Mrs Clinton should have taken it to task over Tibet and
human rights when she was there. The Bush administration made much of the idea of welcoming China
as a “responsible stakeholder” in the international system. The G20 is a chance to give China a bigger
stake in global decision-making than was available in the small clubs of the G7 and G8. But it is also a
chance for China to show it can exercise its new influence responsibly.

对奥巴马而言,这意味着要努力实现一个困难的平衡。在更长的一段时间里,如果他离任之前没能诱使中国(同样还有印度和巴西)坚定地加入自由多边主义,历史将判定他是个失败者。短期内他需要让中国信守诺言同时责备它的过失,克林顿夫人应当已经将西藏和人权问题排入她的中国行程任务里。布什政府为将中国作为一个“责任重大的利益相关者”迎入国际系统做出了许多努力。20国峰是一个给中国下更大赌注的机会,让中国参与比G7或G8那样的小俱乐部做出的更为有用的全球决议。但它同样也是一个中国展示它能负责任的行使它的新影响力的机会。

The bill for the great Chinese takeaway

中式外卖的账单
China’s record as a citizen of the world is strikingly threadbare. On a host of issues from Iran to Sudan, it
has used its main geopolitical asset, its permanent seat on the United Nations Security Council, to
obstruct progress, hiding behind the excuse that it does not want to intervene in other countries’ affairs.
That, sadly, will take time to change. But on the more immediate issue at hand, the world economy,
there is room for action.

中国最为世界成员的记录是显目的不堪。在从伊朗到苏丹的一系列争端中,中国运用它主要的地缘政治资本,在联合国安全理事会的议席,躲在它不想干涉别国事态的理由后面阻碍解决进程。这一点,很悲哀,当然需要时间去改变。但在当前更为迫切的问题上,世界经济,中国有更多的空间去行动。
Over the past quarter-century no country has gained more from globalisation than China. Hundreds of
millions of its people have been dragged out of subsistence into the middle class. China has been a
grumpy taker in this process. It helped derail the latest round of world trade talks. The G20 meeting
offers it a chance to show a change of heart. In particular, it is being asked to bolster the IMF’s resources
so that the fund can rescue crisis-hit countries in places like eastern Europe. Some in Beijing would
prefer to ignore the IMF, since it might help ex-communist countries that have developed “an anti-China
mentality”. Rising above such cavilling and paying up would be a small step in itself. But it would be a
sign that the Middle Kingdom has understood what it is to be a great power.

在过去的四分之一个世纪里,没有国家比中国在全球化的进程中得到更多的好处。它数亿的人民从仅能生存的状态进入到中产阶级。中国在全球化的过程中是一个坏脾气的索取者。它让最新一轮的全球贸易和谈泡了汤。20国峰会给了中国一个从心改变的机会。尤其是它被要求支援国际货币基金组织,以便基金能拯救那些被危机所伤及的西欧国家。北京的一些人可能会忽视世界基金组织,因为它可能会用于帮助前共产主义国家会助长“反华力量”。 超越这样的看法并为世界基金组织付清款项对中国来说将只是一小步。但这将成为一个中华帝国已经明白如何做一个世界强国的标志。