Struts1从入门到放弃

MVC模式

  Jsp/Servlet Web常见架构:

Jsp –> Jsp
Jsp页面数据提交给Jsp处理,并显示。 典型应用如Jive。

Jsp -> Servlet –> Jsp
Jsp页面数据提交给Servlet处理,由Servlet推出Jsp页面。前者Jsp是显示输入数据;后者Jsp是显示处理结果。这是MVC模式实现。
Struts的MVC流程图如下:

View 显示视图实现。使用Jsp技术;使用特定标签库提供与显示相关的控制功能,从而完全杜绝Jsp中的Java代码。

Controller 控制协调。使用Servlet等技术;接受Jsp数据或推出Jsp视图。Struts的Action类似Servlet,通过Command配置去除了Servlet冗余代码,简洁高效。

Model 后台模型。表示业务层。
注意:
1. 在Jsp中不写入与显示无关的Java代码。
2. 在Servlet中不写入业务核心功能代码。

  使用Struts符合面向对象的设计和MVC模式:将界面离散表单数据字段包装成对象,将这个对象为业务层服务,从而保证业务核心是OO。分离了显示和控制以及业务核心,并且可对页面流程进行灵活控制。实际项目中变化最大就是页面流程。

Struts的开发步骤:

创建ActionForm实现
ActionForm是数据表单的对象实现。
创建Action实现
完成其execute()方法。
创建数据表单Jsp和结果Jsp
配置Struts-config.xml

Action代码实现

  编写一个类, 继承org.apache.struts.action.Action, 实现execute方法:
public ActionForward execute(ActionMapping actionMapping,//对应配置
 ActionForm actionForm,//表单对象
 HttpServletRequest request,
 HttpServletResponse response)

  Action负责页面流程控制、前后台交互。将编写的Action类配置在页面流程控制struts-config.xml:

  

  使用DispatchAction,克服一个Action只能一个方法的缺点, Struts-config.xml中在中加入配置parameter=”method“。 在Jsp中提交加入:
ActionForm

   ActionForm是表单的抽象对象,AF字段对应表单的字段,AF是数据对象。 AF也是界面对象,是Domain Model界面实现。

MyActionForm extends ActionForm{
 String id;
 public void setId(String id){ this.id = id}
 public String getId(){ return id;}
}

ActionForm的生命周期 Scope有三种:request、session和application。
Request过程描述:
1. 当用户点按数据表单的提交submit按钮,ActionForm实例随request产生,被Struts使用request.setAttribute保存在request中。
2. Action接受ActionForm后,经过处理推出forward结果Jsp页面。
在一个Request经过的各个环节中,都可以获得相同的ActionForm实例,相当于使用request.getAttribute方法。
ActionForm创建:
//首先检查struts-config.xml配置映射中的scope值。
if (“request”.equals(mapping.getScope())) {

  // 如果是request,将ActionForm对象保存其中
request.setAttribute(mapping.getAttribute(), form);

} else {
//否则认为是Session,将ActionForm对象保存其中
HttpSession session = request.getSession();
session.setAttribute(mapping.getAttribute(), form);
request.setAttribute(mapping.getAttribute(), form);
}

ActionForm获得:
首先检查struts-config.xml配置映射中的scope值。
if (“request”.equals(mapping.getScope())) {

// 如果是request,从其中获得ActionForm对象
request.setAttribute(mapping.getAttribute(), form);

} else {
//否则认为是Session,从其中获得ActionForm对象
HttpSession session = request.getSession();
session.setAttribute(mapping.getAttribute(), form);
request.setAttribute(mapping.getAttribute(), form);
}

通过下塑ActionForm获得
在action子类的具体方法XXXX中downCast:
public ActionForward XXXX(ActionMapping mapping, ActionForm form, HttpServletRequest   request, HttpServletResponse response) throws Exception {
  //ActionForm作为execute方法的输入参数
  FiltersForm filtersForm = (FiltersForm) form;
  return mapping.findForward(“forward”);
}
Jsp标签
  标签两部分组成:tld配置和tagclass类代码组成。
  标签使用:在jsp中首先需要导入tld配置;在web.xml中配置tld配置(URI–Location);

  可以自行编写拓展标签库。 标签库优点在jsp中消灭java代码。

Struts标签 优点:
杜绝Jsp中的Java代码;
方便书写,如:
无需在action值中指定Web名称,直接以/为开头。
以struts标签替代html相应语法。

标签的作用:
  实现离散表单项目和对象之间的转换,实际就是一个转换配置。类似ORM中映射配置,也属于映射配置。为什么有人不喜欢用标签?如果没有对象概念,当然没有转换映射的需求,所以不会用标签。

标签的原理:
  标签基本单元:name 和property
Name: struts在当前scope(取决于配置,一般是request)中寻找符合name值的对象,实质是request.getAttribute(name值)。
Property:通过反射机制,寻找name对象中是否存在property这个方法。执行PropertyUtils.getProperty方法

神奇核心:PropertyUtils

   org.apache.commons.beanutils.PropertyUtils是apache的一个通用包功能:
使用Java Reflection APIs方便从一种高度来透过getter和setter操作所有JavaBean的属性。

copyProperties方法:将一个对象属性值拷贝到另外一个对象相同属性中去。
getProperty(aaa,bbb)方法:返回一个特定bean的特定属性值,相当于”aaa.getBbb”.
常用标签:
表单标签:html:form html:hidden html:text
单纯输出:bean:write
逻辑控制标签:logic:iterate
参数定义:bean:define bean:parameter
通过标签获得ActionForm:

   一个表单一个ActionForm,表单的字段对应ActionForm的字段。

………

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值