`
gaosililn
  • 浏览: 73049 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

ssh学习:struts2的数据封装

 
阅读更多

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>
	

 就可以了。

分享到:
评论

相关推荐

    ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签

    SSH,全称是Struts2、Spring和Hibernate的组合,是一种经典的Java Web开发框架,用于构建高效、可扩展的企业级应用程序。在这个项目中,SSH2框架与Ajax技术结合,实现了一个带进度条的文件上传功能,并且这个功能...

    SSH(Struts,Spring,Hibernate)笔试题与面试题汇总整理.docx

    5. 封装请求参数的对比:Struts1 使用 ActionForm 对象封装用户的请求参数,而 Struts2 直接使用 Action 属性来封装用户请求属性。 6. 表达式语言方面的对比:Struts1 整合了 JSTL,而 Struts2 可以使用 JSTL,但它...

    ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签)

    标题 "ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签)" 涉及到的是一个基于Java Web的项目,利用了Struts2、Spring2.5、Hibernate3.3和Ajax技术,实现了文件上传并带有进度条显示的功能...

    SSH.zip_ssh struts2

    - **Action类和ActionForm**:Struts2中的Action类是处理业务逻辑的核心,ActionForm用于封装用户请求的数据。 - **Service层和DAO层**:Service层负责业务逻辑,DAO层处理数据访问,两者通常通过Spring的依赖注入...

    ssh框架之struts包

    SSH框架,全称为Spring、Struts和Hibernate,是Java Web开发中的一个经典组合。这个框架集合了Spring的依赖注入(DI)和面向切面编程(AOP),Struts的MVC设计模式,以及Hibernate的对象关系映射(ORM)工具。在本...

    SSH中 struts hibernate spring 各起什么作用

    - **ActionForm Bean**:用于封装用户输入的数据,支持表单验证等功能。 - **配置文件**:如**Struts-config.xml**,用于配置各个Action、Form Bean及它们之间的关系。 2. **工作流程**: - 用户通过浏览器提交...

    SSH学习之struts

    Struts常与Spring和Hibernate一起构成SSH(Struts-Spring-Hibernate)架构,Spring负责依赖注入和事务管理,Hibernate则作为持久化层,处理数据库操作。这样的组合提供了强大的企业级应用开发能力。 综上所述,...

    struts2 基础学习

    6. **Struts2与Servlet的关系**:Struts2底层基于Servlet API,它封装了Servlet的一些功能,提供了更高级别的抽象。例如,Struts2的Action相当于Servlet中的doGet/doPost方法,但更易于扩展和管理。 7. **Struts2与...

    ssh2(struts2+spirng2.5.6+hibernate3.2)

    SSH2 是一个流行的Java开发框架组合,由Struts2、Spring2.5.6和Hibernate3.2三个组件构成。这个框架提供了强大的功能,用于构建高效、可维护的企业级Web应用。 **Struts2** 是一个基于MVC(Model-View-Controller)...

    ssh.rar_ssh_ssh struts1_struts1.2

    SSH是Java开发中的一种经典企业级应用框架组合,由Struts、Spring和Hibernate三个开源项目组成,常被称为“轻量级”企业级开发解决方案。这个"ssh.rar"压缩包文件包含了一个基于Struts1.2、Spring2.0和Hibernate3.0...

    ssh框架优缺点 struts hibernate spring

    2. **表单处理复杂**:虽然Struts提供了ActionForm用于封装表单数据,但是处理复杂的表单数据时仍然存在一定的挑战。 3. **灵活性较低**:由于Struts采用了一种较为固定的架构,因此在某些特定场景下可能会显得不够...

    ssh 整合 struts2 jar

    1. 配置Struts2:在web.xml中配置Struts2的前端控制器Filter,如`&lt;filter-class&gt;org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter&lt;/filter-class&gt;`。 2. 创建Action类:Action类通常需要...

    SSH(struts2+spring+hibernate)教务信息管理系统

    SSH(Struts2 + Spring + Hibernate)教务信息管理系统是一个基于Java技术的Web应用程序,它利用了三个核心的开源框架来构建高效、可维护且功能丰富的教育管理平台。SSH是Struts2、Spring和Hibernate的缩写,这些...

    JSP源码——移动ssh项目(struts+spring+hibernate+oracle).zip

    2. 服务层:Spring管理的服务类(Service)封装了业务逻辑,可以调用DAO层进行数据操作。 3. 数据访问:Hibernate的DAO(数据访问对象)类负责与数据库的交互,通过SessionFactory创建Session,执行SQL语句。 4. ...

    对SSH整合的封装

    SSH整合封装是对Spring、Struts和Hibernate这三大Java开源框架集成的一种技术实践。Spring作为应用上下文和依赖注入容器,负责管理对象的生命周期和装配;Struts作为MVC框架,处理HTTP请求并转发到相应的业务逻辑;...

    SSH action+struts.xml+jsp

    SSH(Spring、Struts2和Hibernate)是Java开发中常用的一种企业级应用框架组合,用于构建高效、可维护性高的Web应用程序。在这个场景中,"SSH action+struts.xml+jsp" 指的是在SSH框架下,Struts2的动作(Action)类...

    移动ssh项目(struts+spring+hibernate+oracle)130222.zip

    SSH是Java开发中常见的Web应用框架,由Struts、Spring和Hibernate三个开源组件组合而成,常用于构建企业级的Web应用程序。在这个名为“移动ssh项目(struts+spring+hibernate+oracle)130222.zip”的压缩包中,我们...

Global site tag (gtag.js) - Google Analytics