zoukankan      html  css  js  c++  java
  • Java Web编程的主要组件技术——Struts入门

    参考书籍:《J2EE开源编程精要15讲》

    Struts是一个开源的Java Web框架,很好地实现了MVC设计模式。通过一个配置文件,把各个层面的应用组件联系起来,使组件在程序层面联系较少,耦合度较低。它定义了自己的标签库来实现是视图层,创建了一个内在的Servlet,叫ActionServlet,作为自己的控制器,建立一个叫Action类的对象实现业务逻辑。视图组件和业务逻辑组件的关系在struts-config.xml的配置文件中声明。当Struts应用程序启动时,它首先从struts-config.xml文件中读取信息。根据信息,控制器ActionServlet知道把视图中的请求转发给对应的业务逻辑组件处理,各组件之间没有代码上的联系。

    Struts工作原理图:

    核心组件

      控制器组件

        从客户端接受输入数据、调用业务逻辑操作、决定返回给客户何种视图等,包括:ActionServlet、Action、ActionMapping和ActionForward

        1) ActionServlet类

          把HTTP消息打包传送到框架中合适的处理器,非抽象类,可直接作为具体的控制器使用,必须在配置文件中详细配置

        2) Action类

          控制器组件的扩展,把用户动作与业务操作连接起来,使客户请求和业务模型松散耦合。收到请求后,调用execute()方法

        3) 配置文件struts-config.xml

          整个Struts应用程序的枢纽,声明各组件及其关系,主要包括<form-beans>、<action-mappings>等,用以对ActionForm、Action声明,

          如:

            (配置文件详解) http://blog.csdn.net/zzs0829/article/details/2695410

        4) ActionMapping

          动作映射(ActionMapping)封装了配置文件中action-mappings元素所包含的配置信息,ActionMapping对象包括了一个path属性,用来与外来

          请求URI匹配

        5) ActionForward

          表示一个目标,指在Action完成后,控制器要转交控制权的地方。此时不指定实际的JSP页面,而是以声明的方式把某个动作的转发映射与JSP页面

          相连,然后在整个应用程序中使用那个ActionForward对象。ActionForward对象封装了配置文件中forward元素所包含的信息。

      视图组件

        JSP页面、ActionForm、Struts标记、Java资源包等

        1) ActionForm

        用来在用户和业务层之间传输客户的输入数据,也叫Form Bean。Struts框架自动从请求中收集输入数据,交给一个使用Form Bean实例的Action对

        象,再交给业务层

        Struts框架处理每个请求对应的ActionForm对象步骤:

          1. 检查该项动作的相应映射,查看是否有某个ActionForm得到配置

          2. 如果配置了某个ActionForm,使用action元素中的name属性来查找Form Bean的配置信息

          3. 查看是否已经创建了ActionForm的一个实例

          4. 如果在适当的作用域内已经存在一个ActionForm实例,而且这个实例的类型正是这个新请求所需类型,则重用这个实例

          5. 否则,创建一个新实例,存储在适当的作用域(action元素的scope属性设置)

          6. 调用ActionForm实例的reset()方法

          7. 反复处理请求参数,如果参数名在ActionForm实例中具有对应的设置方法(setter method),则为它填上该参数的值

          8. 如果validate属性为true,则调用ActionForm实例的validate()方法,并返回所出现的任何错误

        简单的ActionForm例子:

     1 import javax.servlet.http.HttpServletRequest;
     2 import org.apache.struts.action.ActionErrors;
     3 import org.apache.struts.action.ActionForm;
     4 import org.apache.struts.action.ActionMapping;
     5 
     6 public class loginActionForm extends ActionForm {
     7     private String username;
     8     
     9     public String getUserName(){
    10         return username;
    11     }
    12     public void setUsername(String username){
    13         this.username=username;
    14     }
    15     public ActionErrors validate(ActionMapping mapping,
    16             HttpServletRequest request) {
    17         return null;
    18     }
    19     public void reset(ActionMapping mapping, HttpServletRequest request) {
    20     }
    21 }
    View Code

        控制器将表单数据填入ActionForm实例之前,会先调用reset()方法,可将ActionForm性质重新设置为默认状态。当输出插入完毕后,控制器会调用

        validate()方法,对输入的数据进行验证,并向控制器返回任何错误。业务逻辑验证应在业务对象中完成,ActionForm中进行的验证只是表示层的验

        证。

          

        2) Struts标记库

          包括HTML标记库、Bean标记库、Logic标记库、Nested标记库、Template标记库和Tiles标记库

          要使用这些标记库,需在web.xml中注册这些标记库

          例如使用HTML标记库:

            <taglib>

              <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>

              <taglib-location>/WEB-INF/struts-html.tld</taglib-location>

            </taglib>

          并在JSP页面引入taglib元素:<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>,最后加入所需JAR包

        3) 使用消息资源包

          Java库中有一组类允许从Java类或属性文件(properties file)中读取消息资源。Struts也提供了一组类似的类,

          org.apache.struts.util.MessageResources

          例如 登入应用程序的资源包:

          #页面标题  

          title.login=Login

          #图像

          image.logo=image/logo.gif

          如何将title.Login插入到页面中:

          <title><bean:message key="title.login"/></title>

      模型组件

        JavaBeans或EJB

    应用示例一:http://flforever1213.iteye.com/blog/941053 

    应用示例二 简单登陆系统:http://pan.baidu.com/s/1DAHCa

  • 相关阅读:
    Jmeter混合场景压力测试
    数据驱动DDT(Data-Driven Tests):测试数据的参数化
    运用TextSuite和TestRunner运行测试脚本
    Test Fixture框架结构
    解决appium-doctor报各种 cannot be found问题
    搭建python+appium环境的时候遇到 'could not find adb.exe!'的问题
    Python appium搭建app自动化测试环境
    夜神模拟器查看APP的activity等信息
    [leetcode 23]Merge k Sorted Lists
    [leetcode 22]generate parentheses
  • 原文地址:https://www.cnblogs.com/cqq626/p/4321295.html
Copyright © 2011-2022 走看看