找回密码

只需一步,快速开始

只需一步,快速开始

QQ登录

只需一步,快速开始

查看: 1787|回复: 2

java 私塾随堂笔记——Struts1.0

  [复制链接]
发表于 2011-3-26 12:15 | 显示全部楼层 |阅读模式
java 私塾随堂笔记——Struts1.0

一.Struts1是什么?
  基于MVC的轻量级,web应用框架。

二.有什么?

Strust1描述Strust2
Servlet-ActionServlet控制器,接受用户请求和状态改变,以及发出视图选择FilterDispatcher
Action控制器的一部分,与模型交互,执行状态改变或状态查询,以及告诉ActionServlet 下一个选择的视图
ActionForm状态改变的数据vo
ActionMapping状态改变事件xwork.xml
ActionForward用户指向或者视图选择Result


三.运行流程

    【此处有Struts1的运行流程图,可以到java 私塾官网下载完整笔记:www.javass.cn

  1.提交request→web容器(即tomcat);
  2.依据web应用上下文找到web应用;如: <html: form action="/cc.do">
  3.再依据部署描述文件web.xml找到ActionServlet

  1. <servlet>
  2.    <servlet-name>action</servlet-name>
  3.    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  4.    <init-param>
  5.       <param-name>config</param-name>
  6.       <param-value>/WEB-INF/struts-config.xml</param-value>
  7.    </init-param>
  8.    <load-on-startup>2</load-on-startup>
  9. </servlet>
  10. <servlet-mapping>
  11.    <servlet-name>action</servlet-name>
  12.    <url-pattern>*.do</url-pattern>
  13. </servlet-mapping>
复制代码
4. ActionServlet接着大致执行顺序如下:
    a.读struts-config.xml形成ActionMapping
    b.依据path找到相应的Action类定义
      <action path="/cc"                           
         type="cn.javass.s2test.web.action.UserAction"
         name="userForm"
         scope="request"
         input="/pages/add.jsp">

    c.依据action定义找到Form的定义
       <form-bean
           name="userForm"
           type="cn.javass.s2test.vo.UserForm">
       </form-bean>

    d.把页面参数填充到Form中
    e.调用execute()
    f.执行execute()得到ActionFoward
    g.依据ActionFoward到mapping中去下一个页面
       <forward name="toList" path="/pages/list.jsp" />

四.怎么做
  1. 创建ActionForm

  1. package cn.javass.s2test.vo;
  2. import java.io.Serializable;
  3. import java.util.*;
  4. import org.apache.struts.action.ActionForm;

  5. public class UserForm extends ActionForm implements Serializable {
  6.   private String uuid,userId,name;
  7.   private int age;
  8.   private Collection<UserForm> ufCol = new ArrayList<UserForm>();
  9.   
  10. @Override
  11.   public String toString(){
  12.     return "uuid=="+uuid+"userId=="+userId+"name=="+name+"age=="+age+"ufCol=="+ufCol;
  13.   }
  14.   public String getUuid() {
  15.     return uuid;
  16.   }
  17.   public void setUuid(String uuid) {
  18.     this.uuid = uuid;
  19.   }

  20.   public String getName() {
  21.     return name;
  22.   }
  23.   public void setName(String name) {
  24.     this.name = name;
  25.   }
  26.   public int getAge() {
  27.     return age;
  28.   }
  29.   public void setAge(int age) {
  30.     this.age = age;
  31.   }
  32.    
  33.   public int hashCode() {
  34.     final int prime = 31;
  35.     int result = 1;
  36.     result = prime * result + ((uuid == null)   0 : uuid.hashCode());
  37.     return result;
  38.   }
  39.    
  40.   public boolean equals(Object obj) {
  41.     if (this == obj)
  42.       return true;
  43.     if (obj == null)
  44.       return false;
  45.     if (getClass() != obj.getClass())
  46.       return false;
  47.     final UserForm other = (UserForm) obj;
  48.     if (uuid == null) {
  49.       if (other.uuid != null)
  50.         return false;
  51.     } else if (!uuid.equals(other.uuid))
  52.       return false;
  53.     return true;
  54.   }
  55.   public String getUserId() {
  56.     return userId;
  57.   }
  58.   public void setUserId(String userId) {
  59.     this.userId = userId;
  60.   }
  61.   public Collection<UserForm> getUfCol() {
  62.     return ufCol;
  63.   }
  64.   public void setUfCol(Collection<UserForm> ufCol) {
  65.     this.ufCol = ufCol;
  66.   }
  67. }
复制代码
说明:
   * ActionForm是一个JavaBean,需继承org.apache.struts.action.ActionForm类,它捕获通过HTTP请求传送的参数
   * ActionForm针对每个HTML表单中的字段具有一个对应的属性
   * ActionServlet匹配请求中的参数和ActionForm中的属性,并调用ActionForm中的setter方法,将参数传入ActionForm
   * 我们的add.jsp有四个表单字段(下面将会看到),所以,我们需要定义ActionForm中相应的setter方法ActionForm中的getter/setter方法,可以通过Eclipse集成环境,自动生成
   * ActionForm中的内部属性全部定义为私有的(private),并通过公共(public)的getter/setter方法来访问

   2.创建Action类

  1. package cn.javass.s2test.web.action;

  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;
  4. import org.apache.struts.action.Action;
  5. import org.apache.struts.action.ActionForm;
  6. import org.apache.struts.action.ActionForward;
  7. import org.apache.struts.action.ActionMapping;
  8. import cn.javass.s2test.business.ebi.UserEbi;
  9. import cn.javass.s2test.util.springhelp.SpringBF;
  10. import cn.javass.s2test.vo.UserForm;

  11. public class UserAction extends Action {
  12.   private UserEbi getEbi(){
  13.     return (UserEbi)SpringBF.getBF().getBean("user-ebi");
  14.   }
  15.   public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
  16.     UserForm uf = (UserForm)form;
  17.     this.getEbi().create(uf);
  18.    
  19.     uf.setUfCol(this.getEbi().getAll());
  20.     System.out.println("col============="+this.getEbi().getAll());
  21.     ActionForward af = mapping.findForward("toList");
  22.     return af;
  23.   }
  24. }
复制代码
说明:
   * Action是一个Java类,需继承org.apache.struts.action.Action类
   * ActionServlet将会组装ActionForm,并将它传递给Action
   * Action 通常负责:
      → 输入校验
      → 调用业务逻辑类执行业务逻辑操作
      → 决定返回哪个ActionForward
   * 我们的UserAction做了如下事情,这些是一个Action通常都会做的最典型的事情:
      → 将输入的ActionForm强制转换为UserActionForm
      → 从UserActionForm对象中获取数据信息
      → 执行数据信息的逻辑判断操作
      → 根据业务逻辑执行的结果,决定返回哪个ActionForward
回复

使用道具 举报

头像被屏蔽
发表于 2011-4-1 14:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

发表于 2011-4-29 02:09 | 显示全部楼层
多少有些模糊啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

热门推荐

关于我们|小黑屋|手机版|Archiver|南漳热线 ( 鄂ICP备2021000082号-2 || 鄂公网安备 42062402000199号 )

GMT+8, 2025-2-22 13:41

Powered by Discuz! X3.4 Licensed © 2001-2013 Comsenz Inc & Style Design

快速回复 返回顶部 返回列表