`
arne3166
  • 浏览: 129720 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Struts2 ——4、struts2从请求取值的三种方式

阅读更多

 Struts2作为WEB框架,必不可少的需要请求中取值。(我在这里说是从请求中取值对于一些读者可能有些晦涩,其实如果我说从页面取值可能就好理解一点了,但除了从已经存在的页面里面能够给后台传值,在地址栏里也可以传,甚至在java代码里也是可以的。)

这里就谈谈struts如何从请求中取值。

我介绍三种方式:

三种取值方式:
1,使用默认的action的传递方式。
2,自定义一个vo,在action中使用这个vo
3,使用ModelDriven的方式。

 

一、使用默认的action的传递方式

 如果我们的请求里面带有两个参数userName和passWord的话,我们只需要在Action里有这两个私有属性就可以了。

请看我的Action:

package study.getValue;
import com.opensymphony.xwork2.Action;
/**
 * 在Action中定义请求里面传过来的值,
 * 并且定义所有的Setter和Getter
 * 这样可以直接在功能方法里面直接使用这些值。
 * @author  arne3166
 * @version  [0100, 2010-9-30]
 */
public class LoginAction
{
    private String userName;//页面里面的userName
    private String passWord;//页面里面的passWord
    //必须的setter和getter方法
    public String getUserName();
    public void setUserName(String userName);
    public String getPassWord();
    public void setPassWord(String passWord);    
    //业务逻辑   
    public String execute()
    {
        if (null!= userName && null != passWord
            && userName.equals("arne3166") && passWord.equals("111111"))
        {
            return Action.SUCCESS;
        }
        else
        {
            return Action.ERROR;
        }
    }
}

 在struts .xml里面的配置

<action name="loginput" >
	<result>/page/getValue/login_input.jsp</result>
</action>
<action name="login" class="study.getValue.LoginAction">
	<result name="success">/page/getValue/success.jsp</result>
	<result name="error">/page/getValue/fail.jsp</result>
</action>

看jsp是怎么写的:

<form action="login.action"><!-- name="userName" 和 name="passWord"同Action里面的私有属性对上 -->
用户名:<input name="userName" type="text"/>用户密码<input name="passWord" type="password"/>
<input type="submit" value="提交"/>
</form>

 

页面视图

访问路径
http://localhost:8080/struts0100/loginput.action

 

 

 结果页面

<!--成功页面 success.jsp-->
<body>
Welcome arne3166!
</body>

<!--失败页面 fail.jsp-->
<body>
You are not the right user!
</body>

 效果:当在页面输入arne3166作为用户名并且密码是111111时

否则



 二、自定义一个vo,在action中使用这个vo

区别于以上的方式,Struts2中允许将页面的值封装起来,放到一个ValueObject(VO)中。就比如上面的例子中的userName和passWord,完全可以放到一个User类中。这样做的好处是,避免如果Action中如果有好多这样的值的话,太多的setter和getter会使得Action看起来比较臃肿的毛病。

看看我们是怎么做的

首先定义User

package study.getValue.vo;
public class User
{
    //页面中的值的封装
    private String userName;
    private String passWord;
    //所有的setter和getter
    public String getUserName();
    public void setUserName(String userName);
    public String getPassWord();
    public void setPassWord(String passWord);
}

 再看Action被简化成了什么样子

 

package study.getValue;
import com.opensymphony.xwork2.Action;
import study.getValue.vo.User;
/**
 *
 * 在Action中定义请求里面传过来Vo,
 * 并且定义VO的Setter和Getter
 * 使用页面参数的时候像使用Vo的属性一样。
 * @author  arne3166
 * @version  [0100, 2010-9-30]
 */
public class VoLoginAction
{
    //将vo作为私有属性
    private User u;
    //setter和getter必不可少
   public User getU();
    public void setU(User u);
    public String execute()
    {
        String userName = u.getUserName();
        String passWord = u.getPassWord();
        if (null!= userName && null != passWord
            && userName.equals("arne3166") && passWord.equals("111111"))
        {
            return Action.SUCCESS;
        }
        else
        {
            return Action.ERROR;
        }
    }
}

  

 这样做了,页面任然用原来的当然是不行的,注意到Action中的user对象的引用是u,那么,在页面里面userName也需要修改成u.userName,passWord也应当修改成u.passWord

<!--login_input_vo.jsp name="u.passWord"和name="u.passWord"是对Action中User对象进行映射 -->
<form action="loginvo.action">
用户名:<input name="u.userName" type="text"/>用户密码<input name="u.passWord" type="password"/>
<input type="submit" value="提交"/>
</form>

 再看看配置文件

 

<action name="loginputvo" >
	<result>/page/getValue/login_input_vo.jsp</result>
</action>
<action name="loginvo" class="study.getValue.VoLoginAction">
	<result name="success">/page/getValue/success.jsp</result>
	<result name="error">/page/getValue/fail.jsp</result>
</action>

 成功失败后的页面没有什么好修改的。

 

三、使用模型驱动(ModelDriven)的方式。

上面的例子中在页面要写上u.userName,按照习惯前面的“u.”是不是可以不要呢,同时又能保持第二种方式里Action的“纯洁”,Struts2的模型驱动就可以做到。

从实现方式上面需要Action实现模型驱动的接口,先来看Action是怎么写的:

 

package study.getValue;
import study.getValue.vo.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ModelDriven;
/**
 *
 * Action实现ModelDriven接口。
 * 在Action里定义一个私有变量User,这个User应该被new出来,
 * 不过里面的值是Strus来设置的
 * 不需要Setter和Getter方法
 * @author  arne3166
 * @version  [0100, 2010-9-30]
 */
public class ModelDrivenLoginAction implements ModelDriven<User>
{
    //需要将user对象new出来;
    private User u = new User();
    //实现的接口方法
    @Override
    public User getModel()
    {
        return u;
    }
    public String execute()
    {
        String userName = u.getUserName();
        String passWord = u.getPassWord();
        if (null!= userName && null != passWord
            && userName.equals("arne3166") && passWord.equals("111111"))
        {
            return Action.SUCCESS;
        }
        else
        {
            return Action.ERROR;
        }
    }
}

 

下面回到Sturts的配置文件

 

<action name="loginputmodeldriven" >
	<result>/page/getValue/login_input_modeldriven.jsp</result>
</action>
<action name="loginmodeldriven" class="study.getValue.ModelDrivenLoginAction">
	<result name="success">/page/getValue/success.jsp</result>
	<result name="error">/page/getValue/fail.jsp</result>
</action>

 

再看表单的页面

 

<!--又回到原始简单的样式了O(∩_∩)O-->
<form action="loginmodeldriven.action">
用户名:<input name="userName" type="text"/>用户密码<input name="passWord" type="password"/>
<input type="submit" value="提交"/>
</form>

 

 这里注意一下,

这是必须的
//需要将user对象new出来;
private User u = new User();

 如果不将user new出来的话,会在页面给你一个异常吃吃

 

Struts Problem Report
Struts has detected an unhandled exception: 

Messages:  
File: study/getValue/ModelDrivenLoginAction.java 
Line number: 23 


--------------------------------------------------------------------------------

Stacktraces
java.lang.NullPointerException 
    study.getValue.ModelDrivenLoginAction.execute(ModelDrivenLoginAction.java:23)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    

  下面附上我的代码。

  • 大小: 4.2 KB
  • 大小: 2 KB
  • 大小: 2.3 KB
1
0
分享到:
评论

相关推荐

    struts2——docs部分

    这个“struts2——docs部分”很显然是Struts2官方文档或者相关的技术资料集合,通常包含详细的框架介绍、API参考、用户指南、教程等内容。在深入学习Struts2时,这些文档是非常重要的参考资料。 **1. 框架概述** ...

    Struts2——教程

    Struts2支持XML配置和注解配置两种方式。XML配置文件主要用于定义Action、结果类型、拦截器栈等,而注解则可以更直观地在Action类或方法上标注,简化配置过程。 五、拦截器 拦截器是Struts2的一大特色,它可以定义...

    Struts2 ——2、各种Action写法和配置

    这篇博客“Struts2 ——2、各种Action写法和配置”着重讲解了在Struts2框架中如何创建和配置不同的Action,以便更好地理解和运用这个框架。 在Struts2中,Action是处理用户请求的核心组件,它负责业务逻辑的处理,...

    struts2——jar包

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它在Web开发领域中被广泛使用。Struts2的核心在于提供一个强大的、灵活的和可扩展的架构,使得开发者能够更方便地构建和管理业务...

    Struts2 技术内幕——深入解析Struts2架构设计与实现原理

    要深入学习和掌握Struts2,建议阅读官方文档,参与实际项目实践,也可以参考相关的技术书籍和教程,例如《Struts2技术内幕——深入解析Struts2架构设计与实现原理》等资源,来提升对Struts2框架的全面理解。

    Struts2+技术内幕——深入解析Struts2架构设计与实现原理

    总之,《Struts2技术内幕——深入解析Struts2架构设计与实现原理》配合《struts2基础.chm》,将帮助读者全面掌握Struts2的架构设计、核心组件、配置方式、插件使用以及源码解读,对于想要在Java Web领域深入发展的...

    struts2 技术内幕——深入解析struts2架构设计

     本书以Struts2的源代码为依托,通过对Struts2的源代码的全面剖析深入探讨了Struts2的架构设计、实现原理、设计理念与设计哲学,对从宏观上和微观上去了解Struts2的技术内幕提供了大量真知灼见。同样重要的是,本书...

    myeclipse+struts实例——2

    【标题】"myeclipse+struts实例——2"是一个基于Java EE(J2EE)技术栈的项目实例,主要涉及MyEclipse集成开发环境、Struts框架和Tomcat服务器的使用。在这个实例中,开发者将学习如何在MyEclipse中创建一个简单的...

    Struts教程——丰伟

    Struts教程——丰伟 1. **概述** 在本文中,我们将深入理解Struts Framework,这是一种基于MVC(Model-View-Controller)设计模式的Java Web应用开发框架。Struts为开发者提供了一种结构化的解决方案,使得创建...

    Struts2 技术内幕——深入解析Struts2架构设计.pdf.zip

    总的来说,"Struts2 技术内幕——深入解析Struts2架构设计"这本书将带你深入理解Struts2的工作原理,包括其架构设计、核心组件、配置方式、数据绑定、异常处理以及安全性等方面。通过对这些知识点的掌握,开发者能够...

    myeclipse+struts实例——3

    在Struts框架中,控制器(Action)负责接收用户的请求,模型(Business Logic)处理业务逻辑,视图(JSP)展示结果,形成清晰的三层架构。 3. **Tomcat**:这是Apache软件基金会的开源Servlet容器,用于运行Java Web...

    spring-mybatis-struts2-master ——demo

    《SSM框架整合详解——基于spring-mybatis-struts2-master的实战分析》 在Java Web开发领域,SSM(Spring、Struts2、MyBatis)框架的组合被广泛使用,因其灵活性和强大的功能而备受青睐。本篇文章将深入探讨这个...

    Struts————实现的验证登陆

    使用Struts做登录验证的步骤: 1 搭建环境: A 导包 B 建配置文件 struts-config.xml C 修改web.xml 2 建一个 ActionForm 3 建一个 Action 4 页面上面的事情

    myeclipse+struts实例——1

    【标题】"myeclipse+struts实例——1"是一个基于Java EE(J2EE)开发的简单登录验证系统,采用MyEclipse作为集成开发环境,Struts作为MVC框架,以及Tomcat作为应用服务器。 【描述】"myeclipse+struts+tomcat 简单...

    Struts 2综合应用实例——添加学生信息

    这些库通常位于`struts2-blank-2.0.14.war`的`\WEB-INF\lib`目录下,共有五个`.jar`文件,包括但不限于`struts2-core.jar`等。 **4. 修改`web.xml`文件** - 在`web.xml`中,我们需要添加Filter的相关配置,以便...

    Struts2 技术内幕——深入解析Struts2架构设计与实现原理.zip

    这本书《Struts2技术内幕——深入解析Struts2架构设计与实现原理》深入探讨了Struts2的核心机制和设计理念,旨在帮助开发者更好地理解和运用这个框架。 首先,Struts2的出现是为了解决Struts1在MVC模式中的局限性,...

Global site tag (gtag.js) - Google Analytics