struts2的数据封装
使用servlet怎么读取前台的表单传来的数据呢?
我们一般的做法就是使用request.getParameter("");但是呢,这样虽然可以读取数据,当数据量打的时候,代码会发生灰常大的冗余也要做了非常多的工作。有什么办法解决这个麻烦呢?办法当然是有的,使用struts数据封装就是一个很好的方法。
struts2的数据封装有两种方法:模型封装以及属性封装。
属性封装:
jsp表单
<form action="firstAction" method="post"> <table> <tr> <th> useName:<input type="text" name="name"> </th> </tr> <tr> <th> password:<input type="password" name="psw"> </th> </tr> <tr> <th> <input type="submit" /><input type="reset" /> </th> </tr> </table> </form>
我们怎么写属性封装的action呢?
表单的提交过来的属性必须要在action的类当中,一个不能少,而且都要写出get/set方法。属性也是必须一致,否则会报错
private String name; private String psw; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPsw() { return psw; } public void setPsw(String psw) { this.psw = psw; } @Override public String execute() throws Exception { System.out.println(name); System.out.println(psw); return SUCCESS; }
这样,我们就可以轻松的获取到表单提交过来的name与psw的参数值了。这样我们不需要书写request.getParameter("");就能获取到数据参数。
上面看到了,struts属性封装数据还是有点麻烦,我们能不能更简单点呢?还是有的,下面我们介绍这种方法:模型封装。
模型封装:
模型封装通俗一点讲就是:在action的类当中,我们使用一个对象去接收数据的参数,而参数的字段名就是接守数据的属性名。属性还是一个不能少,且还是要一致。
先看看非标准的模型封装:
jsp的表单部分代码。请注意name的值,是action类当中的类对象的对象名引用改对象的属性。如:user.psw
<form action="firstAction" method="post"> <table> <tr> <th> useName:<input type="text" name="user.name"> </th> </tr> <tr> <th> password:<input type="password" name="user.psw"> </th> </tr> <tr> <th> <input type="submit" /><input type="reset" /> </th> </tr> </table> </form>
action的代码:
对象不必实例化,但是必须也要写出get/set的方法
private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String execute() throws Exception { System.out.println(user); return SUCCESS; }
当对象中有一个队列集合的属性,怎么进行封装?只要在表单中name的值指定为队列集合的第几个元素就可以了。如:user类中有List list属性,表单中的属性只要写成user.list[0]/user.list[1]/...
标准的模型封装方法:
jsp部分代码,name的值写成封装对象的属性就可,不需对象引出
<form action="firstAction" method="post"> <table> <tr> <th> useName:<input type="text" name="name"> </th> </tr> <tr> <th> password:<input type="password" name="psw"> </th> </tr> <tr> <th> <input type="submit" /><input type="reset" /> </th> </tr> </table> </form>
在action类中,必须要先实例化对象,而且还要在action类中实现接口ModelDriven<封装的对象> ,也要重写getModel方法。在struts.xml文件的对应的action中要实现模型拦截器与默认拦截器。
1.struts.xml的拦截器 ,写在对用的action内
<!-- 模型封装拦截器 --> <interceptor-ref name="modelDriven"></interceptor-ref> <!-- action的默认拦截器 --> <interceptor-ref name="defaultStack"></interceptor-ref>
2.action的类的代码
public class LoginAction extends ActionSupport implements ModelDriven<User> { //必须实例化对象 private User user = new User(); @Override public String execute() throws Exception { System.out.println(user); return SUCCESS; } //返回封装模型 @Override public User getModel() { return user; } }
看来上面的代码,是不是觉得属性封装要比模型封装麻烦一点呢?在模型封装中,还是推荐使用标准的方法,在非标准的方法当中,虽然写起来会比较简单,标准的方法中,性能等各方面均会有一定的优势的。
struts模型封装的原理:
1。当请求数据发送到action之前,调用action类的getModel()方法获取数据将要封装的对象当中去;
2。获取到对象之后,获取封装数据对象的类 类型
3。获取到数据封装类的类型之后,获取类的属性;
4。request.getParameters方法获取表单的所有数据;
5。若表单的name的值与对象的属性一致,提取数据值
6。将提取到的数据封装到数据对象当总去
自动封装数据实例demo:http://blog.csdn.net/c_c123/article/details/46672193
struts标签封装数据:
在使用struts标签封装数据时候,action类实现不需要像上面的封装数据时候再实现接口ModelDriven<封装的对象>接口,封装的数据对象也不需要实例化,但是要实现get/set方法。
jsp文件当中,struts标签实现的表单,使用struts标签得先引入struts标签
<%@ taglib prefix="s" uri="/struts-tags"%>
struts标签的表单实现(struts标签建议使用自结束标签,在一些情况下,使用非自结束标签会发生服务器错误)name的值还是需要使用action类的封装数据对象的变量名引用数据对象的属性。如:user.psw
<s:form namespace="" action="sectAction" method="post"> 用户名:<s:textfield name="user.name"> </s:textfield> 密码: <s:password name="user.psw"></s:password> <s:submit></s:submit> <s:reset></s:reset> </s:form>
action类的局部代码
private User user; @Override public String execute() throws Exception { System.out.println(user); return SUCCESS; } public User getUser() { return user; } public void setUser(User user) { this.user = user; }
这样就可以实现struts标签封装数据了。但是细心的人还是会发现,使用struts标签实现表单时候,表单的顺序有点不对经。这是因为struts标签当中有着他自身的格式,需要重写一些属性就可以了。
在struts.xml文件中 写入一下属性
<!-- 表单样式 --> <constant name="struts.ui.theme" value="simple"></constant> <constant name="struts.ui.templateDir" value="template"></constant> <constant name="struts.ui.templateSuffix" value="ftl"></constant>
就可以了。
相关推荐
SSH,全称是Struts2、Spring和Hibernate的组合,是一种经典的Java Web开发框架,用于构建高效、可扩展的企业级应用程序。在这个项目中,SSH2框架与Ajax技术结合,实现了一个带进度条的文件上传功能,并且这个功能...
5. 封装请求参数的对比:Struts1 使用 ActionForm 对象封装用户的请求参数,而 Struts2 直接使用 Action 属性来封装用户请求属性。 6. 表达式语言方面的对比:Struts1 整合了 JSTL,而 Struts2 可以使用 JSTL,但它...
标题 "ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签)" 涉及到的是一个基于Java Web的项目,利用了Struts2、Spring2.5、Hibernate3.3和Ajax技术,实现了文件上传并带有进度条显示的功能...
- **Action类和ActionForm**:Struts2中的Action类是处理业务逻辑的核心,ActionForm用于封装用户请求的数据。 - **Service层和DAO层**:Service层负责业务逻辑,DAO层处理数据访问,两者通常通过Spring的依赖注入...
SSH框架,全称为Spring、Struts和Hibernate,是Java Web开发中的一个经典组合。这个框架集合了Spring的依赖注入(DI)和面向切面编程(AOP),Struts的MVC设计模式,以及Hibernate的对象关系映射(ORM)工具。在本...
- **ActionForm Bean**:用于封装用户输入的数据,支持表单验证等功能。 - **配置文件**:如**Struts-config.xml**,用于配置各个Action、Form Bean及它们之间的关系。 2. **工作流程**: - 用户通过浏览器提交...
Struts常与Spring和Hibernate一起构成SSH(Struts-Spring-Hibernate)架构,Spring负责依赖注入和事务管理,Hibernate则作为持久化层,处理数据库操作。这样的组合提供了强大的企业级应用开发能力。 综上所述,...
6. **Struts2与Servlet的关系**:Struts2底层基于Servlet API,它封装了Servlet的一些功能,提供了更高级别的抽象。例如,Struts2的Action相当于Servlet中的doGet/doPost方法,但更易于扩展和管理。 7. **Struts2与...
SSH2 是一个流行的Java开发框架组合,由Struts2、Spring2.5.6和Hibernate3.2三个组件构成。这个框架提供了强大的功能,用于构建高效、可维护的企业级Web应用。 **Struts2** 是一个基于MVC(Model-View-Controller)...
SSH是Java开发中的一种经典企业级应用框架组合,由Struts、Spring和Hibernate三个开源项目组成,常被称为“轻量级”企业级开发解决方案。这个"ssh.rar"压缩包文件包含了一个基于Struts1.2、Spring2.0和Hibernate3.0...
2. **表单处理复杂**:虽然Struts提供了ActionForm用于封装表单数据,但是处理复杂的表单数据时仍然存在一定的挑战。 3. **灵活性较低**:由于Struts采用了一种较为固定的架构,因此在某些特定场景下可能会显得不够...
1. 配置Struts2:在web.xml中配置Struts2的前端控制器Filter,如`<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>`。 2. 创建Action类:Action类通常需要...
SSH(Struts2 + Spring + Hibernate)教务信息管理系统是一个基于Java技术的Web应用程序,它利用了三个核心的开源框架来构建高效、可维护且功能丰富的教育管理平台。SSH是Struts2、Spring和Hibernate的缩写,这些...
2. 服务层:Spring管理的服务类(Service)封装了业务逻辑,可以调用DAO层进行数据操作。 3. 数据访问:Hibernate的DAO(数据访问对象)类负责与数据库的交互,通过SessionFactory创建Session,执行SQL语句。 4. ...
SSH整合封装是对Spring、Struts和Hibernate这三大Java开源框架集成的一种技术实践。Spring作为应用上下文和依赖注入容器,负责管理对象的生命周期和装配;Struts作为MVC框架,处理HTTP请求并转发到相应的业务逻辑;...
SSH(Spring、Struts2和Hibernate)是Java开发中常用的一种企业级应用框架组合,用于构建高效、可维护性高的Web应用程序。在这个场景中,"SSH action+struts.xml+jsp" 指的是在SSH框架下,Struts2的动作(Action)类...
SSH是Java开发中常见的Web应用框架,由Struts、Spring和Hibernate三个开源组件组合而成,常用于构建企业级的Web应用程序。在这个名为“移动ssh项目(struts+spring+hibernate+oracle)130222.zip”的压缩包中,我们...