网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  用struts框架开发java应用     
  文章作者:未知  文章来源:水木森林  
  查看:105次  录入:管理员--2007-11-17  
 
  struts开始于2000年3月,是采用java servlet/javaserver pages技术,开发web应用程序的开放源码的框架。当前最新的正式版本是1.0.2,本文内容就是针对这个版本的。采用struts能开发出基于mvc(model-view-controller)设计模式的java web前端应用。通常mvc设计模式把一个系统划分为相互协作的三个部分:
  1. model(模型),模型用于封装系统的状态,比如业务数据;
  2. view(视图),视图是模型的表示,提供用户交互界面。当模型状态发生变化时,视图应该得到通知,以便更新模型的变化;
  3. controller(控制器),接受来自视图的请求,修改模型的状态;
  但是,在基于jsp/servlet的web应用中要使用mvc模式,需要解决这样一个问题,就是http的底层是tcp/ip协议,而tcp/ip是一种无状态连接的协议,如果我们的模型发生了变化,就无从通知视图。而struts采用了在“jsp规范v0.92”中就提出的mvc model 2,这是对mvc在web上应用的修订版,它可以解决这个问题,见图1。
   用struts框架开发java应用(图一)
  图1 mvc model2(frommalcolm davis)
   用struts框架开发java应用(图二)
  图2 sturts工作机理(from malcolm davis)
  struts应用有3个主要部件:一个是使用servlet实现的中心控制器(controller servlet,由struts提供的org.apache.action. actionservlet类实现)及负责具体业务逻辑处理的action(org.apache.action.action的子类);一个是用于显示的jsp页面(viewer);另一个是用于封装系统状态的业务逻辑元件(model)。struts 的中心控制器接受所有来自客户端的请求,并根据系统的配置(struts-config.xml)路由http请求到其它action对象(开发者实现的org.apache.struts. action.action的子类)。在这些action对象中会完成所有的业务操作,比如插入一条订单、修改一条记录等。处理完毕,由struts的controller servlet根据配置转向到适当的jsp页面,将处理结果显示给用户。从这里可以看出,在struts中controller servlet担任了重要的角色,它控制所有的程序流转,使mvc三个相对独立的部分协调工作,从而使系统的功能更加完善。从图1可见struts是mvc model 2的一个典型应用。
  安装
  你可以从http://jakarta.apache.org/builds/jakarta-struts/release/下载struts最新的二进制版本和源码。首先进入v1.0.2下载页面,下载jakarta-struts-1.0.2.zip(3.4mb),然后将jakarta-struts-1.0.2.zip解压。其中包含lib和webapps两个子目录。lib子目录中是使用struts需要的jar文件、标签库定义文件(.tld),以及对一个struts web应用的web.xml和struts-config.xml配置文件的dtd定义(.dtd)。webapps子目录中包含了几个struts的示例应用,都已打包为.war格式,这里主要介绍其中三个:
  
  1. struts-example.war,一个采用struts框架的简单的示例程序controller;
  
  2. struts-documentation.war,struts文档的war包;
  
  3. struts-blank.war,一个空白的struts的应用,可以方便地修改,并且配置自己的应用。
  
  下面运行struts-example这个示例程序。因为struts是一个web应用,所以要运行这个示例需要一个兼容servlet 2.2、jsp 1.1以上规范的web容器。本文以tomcat 3.3a(对tomcat 4.0也适用)为例进行介绍。首先保证tomcat可以正常运行。而运行struts example不需要其它特殊配置的,只要把struts-example.war拷入tomcat下的webapps目录,tomcat在启动时就会自动解压了。然后启动tomcat,在浏览器中输入http://localhost:8080/struts-example,如果能看到如图3页面,就说明已经运行成功。
  
  在图3中你可以点击“register with the mailreader demonstration application”注册一个mailreader用户,或直接点击“log on to the mailreader demonstration application”,输入用户名和密码(示例程序已经预置了一个用户user/pass,配置在struts-example下的web-inf/database.xml文件中)登入。
  分析
  web.xml
  在图3所示的页面中,点击“log on to the mailreader demonstration application”链接,进入/logon.jsp页面,输入预定义的用户名为user、密码为pass,然后提交就进入了图4的用户主页面。
   用struts框架开发java应用(图三)
  图3 struts example主页面
   用struts框架开发java应用(图四)
  图4 用户主页面
  大家可能已经注意到了,这里的url的后缀是.do。那么它有什么意义?服务器又是怎样处理这样的请求呢?下面我们看看{tomcat}/web-inf/web.xml文件,就会非常清楚。在web.xml中,你可以找到如下配置片断:
  
  
  
  action
  *.do
  

  从上面配置代码中可以知道,以.do结尾的请求url是由一个名为action的servlet处理,实际上可以为应用取另一个后缀,只要修改就行了。但下面所有的讨论都以.do为例。我们再看一下这个servlet的配置:
  
  
  
  action
  org.apache.struts.action.actionservlet
  
  application
  
  org.apache.struts.webapp.example.applicationresources
  

  

  
  config
  /web-inf/struts-config.xml
  

  ……
  2
  

  由此可见,action对应的类是org.apache.struts.action.actionservlet。这是一个struts提供的处于中心控制地位的servlet,即图2中的controller servlet,正是用它监听所有的来自于用户的以.do为后缀的请求。在上面的配置中,为actionservlet配置了一个名为config的初始化参数,值为 /web-inf/struts-config.xml,struts-config.xml是一个基于struts应用的最重要的配置文件,其中包含了所有的action请求(指以.do结尾的请求)、相应的action处理类、form bean,以及页面的转向等信息的配置。struts-config.xml在应用启动时读入,然后根据这些配置进行响应。下面以示例程序中的logonaction的配置为例,对struts-config.xml进行分析。
  
  struts-config.xml
  
  下面是struts-config.xml中对logonaction进行配置的部分代码:
     path="/logon"
   type="org.apache.struts.webapp.example.logonaction"
   name="logonform"
   scope="request"
   input="/logon.jsp">
  

  从上面可以看出,mailreader应用中对/logon.do的请求是由org.apache.struts.webapp.example. logonaction类进行处理的,name属性指定的是这个请求对应的表单。
  logonform也是在struts-config.xml中配置的,配置代码为:
  .
  logonform类是一个普通的javabean,其中定义了几个属性及属性的读写方法,而且这些属性的名字要和页面表单中的输入域对应。比如logonform中定义了两个属性,代码如下:
  
  private string username = null;
  private string password = null;
  这两个属性分别对应于logon.jsp表单中的两个输入域,代码如下:
  
  
  
  

  注意,logonform中的属性名一定要和logon.jsp中的表单域名完全对应起来。struts就是由此从浏览器端抓取提交的数据,并填充到logonform对象中,再传送给logonaction类进行处理的。struts实现的表单验证和重填技术也是这样实现的。注意,在上面的页面代码中我们使用了struts的html定制标签库,也可以直接使用类似的html代码,但这样就失去了自动回填的支持。
  
  action
  
  现在我们已经对struts前端应用框架的整体结构、数据流转有了一定的认识。也知道了struts是怎样从配置文件中获取配置信息的,即先启动,然后等待请求,再从前台抓取数据,根据配置信息调用(或生成)action类进行处理,最后根据处理的结果转向到对应的页面响应用户。那么,现在就让我们看看logonaction是怎样进行业务处理,并将处理结果显示给用户的。代码如下:
  
  package org.apache.struts.webapp.example;
  import org.apache.struts.action.action;
  ......
  public final class logonaction extends action {
   public actionforward perform(actionmapping mapping,
   actionform form,
   httpservletrequest request,
   httpservletresponse response)
  throws ioexception, servletexception {
  ......
  actionerrors errors = new actionerrors();
  string username = ((logonform) form).getusername();
  string password = ((logonform) form).getpassword();
  ......
  // 进行用户验证
  // 如果不存在此用户,或密码错误,则将错误添加到errors中
 
 
上一篇: 破解java struts web application开发工具 scioworks camino    下一篇: struts 用户指南
  相关文档
javascript实现网页图片等比例缩放效果 06-26
关于spring中的aop的解释 11-17
java 1.4中工具的改变和更新 11-17
jboss的配置安装 11-17
java调用系统执行程序(os command) 11-17
计算对数 11-17
用jdk6中新特性快速把jlabel做成超链接 11-16
java servlet 编程及应用之cookie的使用方法 11-16
eclipse+myeclipse+lomboz图解安装jsp 11-17
在java中对数组a[depth]的理解 11-17
spring中rod johnson 与“轮子理论” 11-17
说说java的args 大家可能没有注意到的现象 11-17
使用技巧:简单介绍jsp数据库高级操作 11-16
高手教您使用midp底层用户接口api的方法 11-17
java用oci驱连oracle数据库的实现方法 11-16
开发框架:关于struts 连接数据库的问题 01-23
在java中实现sql的select函数功能 11-17
用jar发布java应用程序 11-17
ibm 经典面试题用 .net 编程解答 11-17
微软代码 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息