从struts 1.x升级到 struts 2(二) POJO

本文详细介绍了如何从struts 1.x升级到struts 2,并重点讲解了POJO(Plain Old Java Objects)在struts2中的应用。首先,通过简单POJO展示了如何使用getter和setter方法替代request.getParameter()获取表单数据。接着,探讨了struts2的高级POJO特性,将LoginAction中的userName和password分离到独立的User类,以实现更清晰的系统结构,适合多层系统开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上例中,其实我只使用了struts2中的简单MVC映射,同时,我在servlet和JSP中大量使用了request对象,而且没有使用任何的struts标签,这些都是struts不希望用户做的事情。但是,我在写本文的时候,更想从最原始的地方入手,一步步地揭示struts的功能。老本儿不能忘啊,我可不希望某天我离了struts后,发现地球不转了。

POJO,简单的Java对象(Plain Old Java Objects)实际就是普通JavaBeans,使用POJO名称是为了和EJB混淆起来, 而且简称比较直接. 有一些属性及其getter setter方法的类,有时可以作为value object或dto来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,不能携带有connection之类的,例如针对某个数据库表的映射类,里面用getter和setter方法来表示每一个字段,但不带任何的的Insert、Delete之类的操作。

简单POJO

本节讲述struts使用的POJO技术代替request.getParameter()方法来获取表单输入。除了LoginAction.java外,上节的所有程序均不变,LoginAction.java修改如下:


package example;

import javax.servlet.http.HttpServletRequest;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletRequestAware;

public class LoginAction extends ActionSupport implements ServletRequestAware 
{
    
private HttpServletRequest request;
    
    
public void setServletRequest(HttpServletRequest request) 
    
{
        
this.request = request;    
    }


    
    
private String userName;
    
public String getUserName()
    
{
        
return this.userName;
    }

    
public void setUserName(String userName)
    
{
        
this.userName = userName;
    }

    
    
private String password;
    
public String getPassword()
    
{
        
return this.password;
    }

    
public void setPassword(String password)
    
{
        
this.password = password;
    }

    
    
public String execute() throws Exception 
    
{
        
if(this.userName.equals("lld"&& this.password.equals("lld"))
        
{
            
this.request.setAttribute("UserName"this.userName);
            
this.request.setAttribute("Password"this.password);
            
return "success";
        }
else
            
return "failed";
            
    }


}

根据JSP页面上表单输入对象的名称,在servlet类中创建对应名称的getter及setter,运行后我们会神奇地发现,系统自动调用了setter,将表单中的数据传到了变量中!

无论是以get还是以post方式传入的参数,struts POJO都能够支持。

高级POJO

Struts 2.0更厉害的是支持更高级的POJO访问,我们可以将userName和password从LoginAction类中分离为单独的类User。这样对我们开发多层系统尤其有用,它可以使系统结构更清晰。

新建的User.java如下所示


package example;

public class User
{
    
private String userName;
    
public String getUserName()
    
{
        
return this.userName;
    }

    
    
public void setUserName(String userName)
    
{
        
this.userName = userName;
    }

    
    
private String password;
    
public String getPassword()
    
{
        
return this.password;
    }

    
public void setPassword(String password)
    
{
        
this.password = password;
    }


}

而LoginAction.java改为如下形式:


package example;

import javax.servlet.http.HttpServletRequest;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletRequestAware;

public class LoginAction extends ActionSupport implements ServletRequestAware 
{
    
private HttpServletRequest request;
    
    
public void setServletRequest(HttpServletRequest request) 
    
{
        
this.request = request;    
    }

    
    
private User user;
    
public User getUser()
    
{
        
return this.user;
    }

    
public void setUser(User user)
    
{
        
this.user = user;
    }

    
    
    
public String execute() throws Exception 
    
{
        
if(this.user.getUserName().equals("lld"&& this.user.getPassword().equals("lld"))
        
{
            
this.request.setAttribute("UserName"this.user.getUserName());
            
this.request.setAttribute("Password"this.user.getPassword());
            
return "success";
        }
else
            
return "failed";
            
    }


}

将Login.jsp修改如下:


<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding
="GB18030"
%>
<html>
<head>
<title>Login</title>
</head>
<body>
<form name="form1" action="/tutorial/example/Login.action" method="post">
    user name: 
<input type="text" name="user.UserName" /> <br />
    password: 
<input type="password" name="user.Password" /> <br />
    
<input type="submit" value="Submit" />
</form>
</body>
</html>

 

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值