`
zisefeiniao
  • 浏览: 172483 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

继续Struts的学习,加油

阅读更多
今天所讲的知识点
A Struts的logic标签
B Struts的html标签
C Struts的分发Action
D Struts的文件上传


我对知识点的分析
A Struts的logic标签
一、logic:present与logic:notPresent
1、logic:present:判断属性范围中某个属性是否存在(即判断是否为null值),如果存在,则进入该标签内的代码中
<%
User user = new User();
user.setUserid("MLDN");
request.setAttribute("user",user);
%>
<logic:present name="user" property="birthday" scope="request">
存在
</logic:present>
类似的logic:notPresent:判断属性范围中属性不存在,如果不存在,进入该标签中的代码
说明:
(1)其中name表示属性名称,property表示属性对象中的某个属性,如果包含了property,则先判断属性对象是否存在,如果存在,再判断其中的属性是否存在。
(2)scope表示判断属性所在的范围,如果没有配置scope范围,则从4种属性范围中依次寻找,只要找到任意一个,则表示存在
2、可以通过parameter属性判断某个传递的参数是否存在
   <logic:present parameter="id" >
    存在
   </logic:present>
   <logic:notPresent parameter="id">
    不存在
   </logic:notPresent>
3、类似的还有cookie和header,分别用来判断是否包含cookie或header信息

二、logic:equal与logic:notEqual
logic:equal:当属性范围中的某个属性的值与另一个值相等时,执行该标签中的代码
同理:logic:notEqual,判断不相等
<%
   User user = new User();
   user.setUserid("MLDN");
   session.setAttribute("user",user);
   %>
   <logic:present name="user" property="userid" scope="request">
   <logic:equal value="MLDN" name="user" property="userid" scope="request">
    相等
   </logic:equal>
  </logic:present>
说明:(1)其中value表示等号右边的值,该值只能为字符串或数字等基本类型
(2)name和property使用方式与之前相同,但必须保证name存在才可以比较property,否则会出现异常,因此一般先使用logic:present判断存在后,再进行比较。
(3)scope表示属性的范围
(4)当对两个属性范围中属性对象的某项进行比较时,需要将等号右边的值(value属性)加入EL表达式进行输出。
  <%
   User user = new User();
   user.setUserid("MLDN");
   session.setAttribute("user",user);
  
   user = new User();
   user.setUserid("MLDN");
   request.setAttribute("user",user);
  
   %>
   <logic:equal value="${requestScope.user.userid}" name="user" property="userid" scope="session">
    相等
   </logic:equal>

三、logic:greaterThan(大于)与logic:lessEqual(小于等于)
   <logic:greaterThan value="100" name="user" property="age" scope="session">
    大于
   </logic:greaterThan>
   <logic:lessEqual value="100" name="user" property="age" scope="session" >
    小于等于
   </logic:lessEqual>

四、logic:lessThan(小于)与logic:greaterEqual(大于等于)

五、logic:match(一般不使用),用来完成字符串模糊查询的
判断属性范围的属性或属性对象的属性,或参数中等是否包含value指定的字符串

六、迭代输出
1、使用logic:iterate标签进行迭代
<!-- 这里的id表示循环迭代中设置到page范围的属性名称 -->
<!-- 这里的name表示属性范围的属性(集合)名称 -->
<logic:iterate id="num" name="all" scope="request">
${num.userid }<br>
</logic:iterate>

2、可以通过indexId索引属性来设置显示格式
(1)实现单双行变色的功能
<logic:iterate id="num" name="all" scope="request" indexId="index">
     <font color="${index%2==0?"red":"green" }">${num.userid }</font><br>
</logic:iterate>
(2)还可以通过indexId完成每行显示3(多)条记录的功能
<logic:iterate id="num" name="all" scope="request" indexId="index">
     <font color="${index%2==0?"red":"green" }">${num.userid }</font>
<bean:define id="temp" value="${index%3}"></bean:define>
<logic:equal value="2" name="temp">
  <br>
</logic:equal>
</logic:iterate>

3、可以通过length和offset属性完成假分页功能
<logic:iterate id="num" name="all" scope="request" length="10" offset="20">
     ${num.userid } <br>
</logic:iterate>
<!-- 循环前先进行判断 -->
<logic:present name="all" scope="request">
<!-- 这里的id表示循环迭代中设置到page范围的属性名称 -->
<logic:iterate id="num" name="all" scope="request" indexId="index" length="10" offset="20">
      ${num.userid }<br>
</logic:iterate>
</logic:present>

B Struts的html标签
一、超链接
1、普通HTML:<a href=”xxx?id=1”>连接</a>
2、html标签:<html:link></html:link>
<html:link href="bean.jsp" paramId="id" paramName="id">连接</html:link>
如果要传递多个参数,必须设置Map属性
  <a href="bean.jsp?id=4&status=delete">连接</a> <br>
  <%
   Map m = new HashMap();
   m.put("status","list");
   m.put("id",4);
   request.setAttribute("myparam",m);
   %>
  <html:link href="bean.jsp" name="myparam">连接</html:link>

二、表单
1、普通HTML:<form action=””> </form>
2、html标签:<html:form action=””></html:form>
使用html:form提交路径必须存在,而且必须路径指向Struts的某个action路径(必须为xxx.do),还有必须为绝对路径,必须从WebRoot下开始填写
3、html:form中可以包含普通html元素,但普通的form中绝对不允许包含html:text等html标签的输入元素,否则会出现异常。
4、 html:form没有单独设置的name属性,其name的值为struts-config.xml中对应ActionForm的name属性。

三、表单的其他元素
1、
普通HTML html标签
密码框 <input type=”password” name=””> <html:password property></html:password>
文本域 <textarea></textarea> <html:textarea property></html:textarea>
文本框 <input type=”text” name=””> <html:text property></html:text>
使用html:text等标签可以自动完成回填功能,使用property设置属性名称,如果在ActionForm中该属性不存在,则出现异常
<html:form action="regist.do">
   文本框:<html:text property="user.userid"></html:text><br>
   密码框:<html:password property="user.password"></html:password><br>
   文本域:<html:textarea property="content" rows="5" cols="30" value="abc"></html:textarea> <br>
   <input type="submit" value="提交">
  </html:form>
这里的textarea,默认值需要通过value属性进行设置,而不是通过直接在textarea标签的开始和结束标记之间中进行编写

2、
普通HTML html标签
单选按钮 <input type=”radio” name=””> <html:radio property></html:radio>
下拉列表 <select><option></option></select> <html:select property></html:select>
可以自动回填,设置默认值需要通过ActionForm进行设置,而不能使用checked或selected
性别:<html:radio property="sex" value="男">男</html:radio>
   <html:radio property="sex" value="女">女</html:radio><BR>
   选择所在城市:
   <html:select property="city">
    <html:option value="1">北京</html:option>
    <html:option value="2">上海</html:option>
    <html:option value="3">深圳</html:option>
    <html:option value="4">其他</html:option>
   </html:select>
private String sex = "男" ;
private int city = 2 ;

对于下拉列表还可以通过html:options的形式进行设置全部值
选择所在城市:
<html:select property="city">
<html:options collection="all" labelProperty="title" property="id"/>
</html:select>
colloction表示保存所有数据的集合属性名称,labelProperty表示option中显示的文本内容所对应的属性名,property表示option中value值所对应的属性名。


3、
普通HTML html标签
多选按钮 <input type=”checkbox” name=””> <html:checkbox property></html:checkbox>
  <html:multiboxt property></html:multibox>
使用html:checkbox时,该多选框无法设置默认值
而html:multibox可以通过默认值的形式来设置默认选中
喜欢的运动:
<html:checkbox property="sports" value="1"></html:checkbox>足球
<html:checkbox property="sports" value="2"></html:checkbox>篮球
<html:checkbox property="sports" value="3"></html:checkbox>乒乓球
<html:checkbox property="sports" value="4"></html:checkbox>羽毛球
喜欢的运动:
<html:multibox property="sports" value="1"></html:multibox>足球
<html:multibox property="sports" value="2"></html:multibox>篮球
<html:multibox property="sports" value="3"></html:multibox>乒乓球
<html:multibox property="sports" value="4"></html:multibox>羽毛球


C Struts的分发Action
可以使用分发Action将每一个操作单独定义一个方法,根据某一个状态参数决定自动调用其中的一个方法。
一、实现方法
1、使用的Action类为DispatchAction
2、将每个操作单独定义为方法,方法的返回值和参数与execute方法一致,方法名为传递的状态参数的具体值(即status状态参数的值)
3、将原有的execute方法删除
4、在struts-config.xml中设置参数名称,根据该参数来确定所设置的方法名(来决定调用哪个方法)
<action attribute="userForm" input="/error.jsp" name="userForm"
   path="/user" scope="request" parameter="status"
   type="org.liky.struts.action.UserAction">
   <forward name="list" path="/list.jsp"></forward>
   <forward name="forward" path="/forward.jsp"></forward>
   <forward name="update" path="/update.jsp"></forward>
  </action>

二、实现原理
DispatchAction的execute方法中取得了patameter设置的参数值(status的值),再根据该值通过反射调用与该值同名的方法自动执行,接收返回结果,将结果返回给,ActionServlet进行跳转

D Struts的文件上传
一、页面上需要设置的
如果需要进行文件上传,就必须对表单进行多媒体封装
<html:form action="user.do" method="post" enctype="multipart/form-data">
文件域
用户照片:<html:file property="photo"></html:file>
二、参数接受你
此处不需要修改其他参数的接收方法,还是使用ActionForm进行自动接收
而文件需要使用Struts提供的封装文件类(FormFile)单独进行接收
三、文件上传及保存
在Struts中,如果要进行文件保存,需要使用IO流操作:需要使用字节的输出流(OutputStream)

在ActionForm中进行处理文件名
在Action中处理文件保存
示例,参见StrutsCRUDDemo



个人总结:
作业StrutsCRUDDemo(已解决)
1、问题1:数据库连接的Driver路径写错,报错,找不到Driver
private static final String DBDRIVER="org.git.mm.mysql.Driver";(错误)
private static final String DBDRIVER="org.gjt.mm.mysql.Driver";

2、文件上传,表单没有封装
ActionForm在接受参数时,文件参数接收类型不匹配错误


分享到:
评论

相关推荐

    Struts 学习资料大全

    Struts2 学习书籍: 《精通Struts:基于MVC的JavaWeb设计与开发(孙卫琴)》 《Struts快速学习指南》 Struts2.0.chm 《Struts 2 in Action》 《Struts in Action 中文版》

    struts学习(二)

    Struts学习(二)主要涉及的是Apache Struts框架的深入理解和使用,这是一个广泛应用于Java Web开发中的MVC框架。在本篇文章中,我们将探讨Struts的核心概念、安全问题以及一些实用工具,帮助开发者更好地掌握这一...

    struts2中文学习文档

    从给定的文件信息来看,标题“struts2中文学习文档”和描述“struts2的根本webwork2”表明这是一份关于Struts2框架的学习资料,特别强调了Struts2与WebWork2的关系。Struts2是Apache Struts的一个版本,它是一个用于...

    struts2 学习资料

    这个压缩包中包含的资源是学习Struts2的关键资料,帮助开发者深入理解和掌握这个框架。 首先,"struts2权威指南"是学习Struts2的核心参考资料,通常会涵盖框架的基本概念、核心组件、配置细节、MVC设计模式的应用...

    struts 学习案例

    【标题】"Struts学习案例" 提供了一个实际的项目实例,旨在帮助学习者快速理解和掌握Struts框架的核心概念与应用。通过深入学习这个案例,你可以了解如何将Struts整合到你的Java Web项目中,以及如何利用它来处理...

    STRUTS2学习文档

    这个"STRUTS2学习文档"显然是一个关于如何理解和使用Struts2框架的教程资料,对于想要快速掌握Struts2核心概念和技术的开发者来说,它是一份非常有价值的资源。 Struts2框架的核心特点包括: 1. **拦截器...

    struts2学习 源码

    本资料“struts2学习 源码”旨在帮助初学者理解Struts2的核心概念和工作原理,通过来自达内的详细代码实例来提供直观的学习体验。 Struts2框架的关键特性包括: 1. **动作(Action)**:在Struts2中,业务逻辑通常...

    struts2四天的学习笔记

    Struts2是一个强大的Java web应用程序框架,用于构建和维护可扩展、易于管理的企业级应用程序。在四天的学习中,你可能...继续深入学习,如整合Spring、Hibernate等其他框架,你将能构建更复杂、更高效的Java web系统。

    Struts1.2中文学习手册

    Struts1.2中文学习手册是一本面向初学者的指南,它涵盖了Struts1.2的基础知识、配置、控制器、模型、视图以及动作和业务逻辑的整合。 首先,手册会介绍Struts1.2的核心概念,包括Action类、Form Bean和Tiles布局。...

    struts2学习测试代码,struts2学习测试代码2

    struts2学习测试代码,struts2学习测试代码2struts2学习测试代码,struts2学习测试代码

    struts学习总结

    以下是对Struts学习的一些核心知识点的详细解释: 1. **MVC模式**:Model-View-Controller模式是软件工程中的一种设计模式,用于分离业务逻辑、数据模型与用户界面。在Struts中,Controller由Action类实现,Model...

    struts 2完全学习手册

    ### Struts 2完全学习手册知识点详解 #### Struts 2简介 Struts 2是Struts框架的一个重要分支,它继承了Struts 1.x的一些特性,并在此基础上进行了大幅度的改进与扩展,使之成为了一个更为强大、灵活的Web开发框架...

    struts2学习心得

    ### Struts2学习心得:深入理解Struts2框架的基本配置与初学者指南 #### Struts2框架概述 Struts2是Struts框架的升级版本,它继承了Struts1的优点并在此基础上进行了改进,提供了更丰富的功能和更好的性能。Struts...

    struts学习总结.zip

    欢迎访问我的博客:http://blog.csdn.net/chenpy/&lt;br&gt; &lt;br&gt;struts学习总结说明 本人精心搜集了有关struts学习的资料,有我以前学习时候写的笔记,有学习用的代码还有 其他的好资料,详细列表如下: 1...

    Struts学习文档

    通过Stutus2学习文档,你可以系统地了解和掌握Struts2的各个核心概念,逐步提升你在Web应用开发中的技能。结合博文链接中的内容,可以进一步加深对Struts2实践操作的理解。在实际开发中,熟练运用Struts2能够提高...

    struts2入门学习源码

    这个入门学习源码包包含了关于Struts2的基础知识、学习笔记以及源码实例,旨在帮助初学者快速理解和掌握Struts2的核心概念和技术。 首先,让我们深入了解Struts2的基本原理。Struts2是Apache软件基金会的一个开源...

    struts1学习资料

    Struts1的学习资料通常会涵盖以下几个核心知识点: 1. **MVC模式**:MVC模式是软件工程中的一种设计模式,用于分离业务逻辑、数据模型和用户界面。在Struts1中,Action类代表Controller,它接收用户请求并调用业务...

    Struts2学习笔记

    根据给定的文件信息,以下是对Struts2学习笔记中涉及的关键知识点的详细解析: ### Struts2框架概览 #### MVC模式的理解与演进 Struts2是基于MVC(Model-View-Controller)模式设计的一种Java Web开发框架。在MVC...

Global site tag (gtag.js) - Google Analytics