1.2.x
一、 MVC模式
MVC模式是“Model-View-Controller”的缩写,中文翻译为模型-视图-控制器MVC应用程序总是由这三个部分组成。
模型(Model):就是业务流程/状态的处理以及业务规则的制定。
视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTMLJSP,也有可能为XHTMLXMLApplet等。
控制(Controller)可以理解为接收用户请求, 将调用模型处理请求,并响应用户。
二、 Struts介绍
Struts Apache软件基金会ASF)赞助的一个开源项目。它最初是 Jakarta项目
的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用 Java ServletJSP 技术,实现了基于Java EE Web应用的 Model-View-ControllerMVC设计模式的应用框架〔Web Framework〕,是 MVC 经典设计模式中的一个经典产品。
Struts 中,已经由一个名为 ActionServlet Servlet 充当 控制器(Controller)的角,根据描述模型、视图、控制器对应关系的 l 的配置文件,转发视图(View)的请求,组装响应数据模型(Model)。在 MVC 模型Model)部分,经常划分为两个主要子系统(系统的内部数据状态改变数据状态的逻辑动作),这两个概念子系统分别具体对应 Struts 里的 ActionForm Action 两个需要继承实现超类。在这里,Struts 可以与各种标准的数据访问技术结合在一起,包括Enterprise Java BeansEJB, JDBC JNDI。在 Struts 视图View)端,除了使用标准的JavaServer PagesJSP)以外,还提供了大量的标签库使用,同时也可以与其他表现层组件技术(产品)进行整合,比如 Velocity TemplatesXSLT 等。通过应用 Struts 的框架,最终用户可以把大部分的关注点放在自己的业务逻辑(Action)与 映射关系的配置文件(l)中。
Struts结构图如下:
三、 Struts 五大标签(运行在服务器端,属于视图技术)
1. HTML标签
<%@ taglib prefix="html" uri="/tags-html"%>
a) 用于生成基本的HTML元素的标签
1  <html:html>标签用于生成HTML<html>元素
2  <html:base>
3  <html:link>
4  <html:rewrite>
b) 用于生成HTML表单的标签
1  <html:form>
2  数据输入标签
<html:text>
<html:password>
<html:hidden>
<html:textarea>
<html:radio>
<html:checkbox>
<html:select>
<html:option>
3  提交按钮标签
<html:submit>
<html:cancel>
<html:reset>
<html:button>
<html:image>
c) 用于显示错误或正常消息的标签
<html:errors>:用于显示错误消息
<html:messages>:用于显示正常消息
2. bean 标签
<%@ taglib prefix="bean" uri="/tags-bean"%>
a) 用于访问HTTP请求信息或JSP隐含对象
1  <bean:cookie>
2  <bean:header>
3  <bean:parameter>
4  <bean:page>
b) 用于访问Web应用资源
1  <bean:message>:用于显示ResourceBundle 中的消息。
用来从指定的locale中取回国际化的消息并输出。这个过程可以传递5个以内的参数。Message标签有两种指定message key的方式,一是通过key属性直接指定;二是通过nameproperty属性间接的指定,其中message key是在message resources文件中定义的。
如:
<bean:message key=login.page.title>
2  <bean:resource>
3  <bean:struts>
4  <bean:include>
c) 用于定义或输出JavaBeanBean标签
1  <bean:define>
2  <bean:write>
3  <bean:size>
bean:write,输出
d) name,在scope范围到变量
<bean:write name="test"/> 等价于 <%=Attribute("test")%>
e) filter
<bean:write name="test" filter="true"/> filter(true,false),默认是truetrue按原样输出,false格式化输出。
f) property
<bean:write name="user" property="username"/>
g) format
<bean:write name="date" format="yyyy-MM-dd HH:mm:ss"/>
<bean:write name="number" format="###,###.####"/>
<bean:write name="number" format="###,###.0000"/>
3. logic标签
<%@ taglib prefix="logic" uri="/tags-logic"%>
a) 进行比较运算的Logic标签
<logic:equal>
<logic:notEqual>
<logic:greaterEqual>
<logic:greaterThen>
<logic:lessEqual>
<logic:lessThan>
b) 进行字符串匹配的Logic标签
<logic:match>
<logic:notMatch>
c) 判断指定内容是否存在的Logic标签
<logic:empty><logic:notEmpty>
<logic:present><logic:notPresent>
<logic:messagesPresent><logic:messagesNotPresent>
d) 进行循环遍历的Logic标签
<logic:iterate>
e) 进行请求转发或重定向的Logic标签
<logic:forward>
<logic:redirect>
logic:emptylogic:notEmpty,判断是否为空“”, 数组集合也就是判断个数。
   
<logic:empty name="attr1">
        attr1为空<br>
javaservlet和jsp的比较
    </logic:empty>
    <logic:notEmpty name="attr1">
        attr1不为空<br>
        </logic:notEmpty>   
logic:presentlogic:notPresent,判断是否存在null
   
<logic:present name="attr1">
        attr1存在<br>
    </logic:present>
    <logic:notPresent name="attr1">
        attr1不存在<br>
        </logic:notPresent>
   
logic:iterate,迭代。
   
<table border="1">
        <tr>
            <td>姓名</td>
            <td>年龄</td>
            <td>所属组</td>
        </tr>
        <logic:empty name="userlist">
            <tr>
                <td colspan="3">没有符合条件的数据!</td>
            </tr>
        </logic:empty>
        <logic:notEmpty name="userlist">
            <logic:iterate id="user" name="userlist">
                <tr>
                    <td>
                        <bean:write name="user" property="username"/>
                    </td>
                    <td>
                        <bean:write name="user" property="age"/>
                    </td>
                    <td>
                        <bean:write name="user" property="group.name"/>
                    </td>
                </tr>
            </logic:iterate>
        </logic:notEmpty>
</table>
4. Nested标签,用于表达JavaBean嵌套关系及特定的嵌套级别提供等
5. Tiles标签,需要结合Tiles框架
四、 ActionForm (数据收集)
1、 动态ActionForm
    动态ActionForm是为了避免标准ActionForm膨胀而设计的,使用动态ActionForm可以获得标准
    ActionForm的所有功能
    * l文件中定义动态ActionForm,如:
    <form-beans>
        <form-bean name="dynaForm"
type="org.apache.struts.action.DynaActionForm">
            <form-property name="username" type="java.lang.String" />
            <form-property name="age" type="java.lang.Integer"/>
<form-property name="user" type="com.shopping.www.vo.User"/>
        </form-bean>
    </form-beans>
    *Action中使用动态ActionForm
        DynaActionForm daf = (DynaActionForm)form;
        String username = (("username");
        Integer age = (("age");
User user= (("user");
动态ActionForm其实是把页面中的html元素的名字和值放到了map中,所以通过get方法可以取出相应的值
    动态ActionForm采用EL表达式的输出方式,${dynabean.map.prop},
: ${dynaForm.map.username}
    动态ActionForm的验证,通常使用动态验证框架validator实现。
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。