Struts学习(五):对POJO对象访问的支持

简介:

在Struts2.0里面有一个非常牛*的功能就是支持更高级的POJO访问,这句话是什么意思呢?下面来通过例子实际操作一把就能体会到这个功能的强大与好使了。

要实现的功能:如果用户输入用户名xiaozu,密码111111,则显示welcome,xiaozhu!否则提示用户名或密码错误。

下面是我们所需的文件:
登陆页面login.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>

<title>登陆页面</title>

</head>
<body>

<s:form action="/test/loginAction.action" method="post">

         <s:textfield name="userName" label="用户名"/>

         <s:password name="password" label="密码"/>

          <s:submit/>

</s:form>

</body>
</html>

请求处理LoginAction.java:
 

 
 
  1. package tutorial;  
  2. import com.opensymphony.xwork2.ActionSupport;  
  3.  
  4. public class LoginAction extends ActionSupport {  
  5.  
  6.     private String msg="显示默认消息";  
  7.     private String userName;  
  8.     private String password;  
  9.  
  10.     public String getPassword() {  
  11.          return password;  
  12.     }  
  13.     public void setPassword(String password) {  
  14.        this.password = password;  
  15.     }  
  16.     public String getUserName() {  
  17.        return userName;  
  18.     }  
  19.     public void setUserName(String userName) {  
  20.        this.userName = userName;  
  21.     }  
  22.     public String getMsg() {  
  23.        return msg;  
  24.     }  
  25.     public String execute(){  
  26.     if ("xiaozhu".equals(userName)&&"111111".equals(password)) {  
  27.         msg="welcome,"+userName;  
  28.        } else {  
  29.             msg="用户名或密码错误";  
  30.        }  
  31.     return this.SUCCESS;  
  32.     }  
  33. }  

响应页面HelloWorld.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
  <head>
<title>Hello</title>
 </head>
    <body>
        <h3><s:property value="msg"/></h3>
    </body>
</html>

如上所示,对于login.jsp表单中的每个值域我们都会在相应的action中声明一个对应的属性并产生相应的getset方法,如果这个表单中的值很多(例如注册用户信息的表单),就会导致action十分庞大和容易混乱,并且也不利于我们的软件分层,违背了OO的原则,下面看一下改进后的方案。

登陆页面login.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"            "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>Insert title here</title>

</head>

<body>

<s:form action="/test/loginAction.action" method="post">

    <s:textfield name="user.userName" label="用户名"/>

    <s:password name="user.password" label="密码"/>

    <s:submit/>

</s:form>

</body>

</html>

新增实体类User.java

 
 
  1. package tutorial;  
  2. public class User {  
  3.  
  4.     private String userName;  
  5.     private String password;  
  6.  
  7.     public String getPassword() {  
  8.        return password;  
  9.     }  
  10.     public void setPassword(String password) {  
  11.        this.password = password;  
  12.     }  
  13.     public String getUserName() {  
  14.        return userName;  
  15.     }  
  16.     public void setUserName(String userName) {  
  17.        this.userName = userName;  
  18.     }  

请求处理LoginAction.java

 

 
 
  1. package tutorial;  
  2. import com.opensymphony.xwork2.ActionSupport;  
  3. public class LoginAction extends ActionSupport {  
  4.  
  5.     private String msg="显示默认消息";  
  6.     private User user;  
  7.     public User getUser() {  
  8.        return user;  
  9.     }  
  10.     public void setUser(User user) {  
  11.        this.user = user;  
  12.     }  
  13.     public String getMsg() {  
  14.        return msg;  
  15.     }  
  16.     public String execute(){  
  17.          if("xiaozhu".equals(user.getUserName())         &&"111111".equals(user.getPassword()))  
  18.  
  19.         msg="welcome,"+user.getUserName();  
  20.  
  21.     else  
  22.  
  23.         msg="用户名或密码错误";  
  24.  
  25.     return this.SUCCESS;//  
  26.  
  27.     }  
  28. }  

响应页面HelloWorld.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
       <title>Hello</title>
    </head>
    <body>
        <h3><s:property value="msg"/></h3>
    </body>
</html>

前后两种处理方式有何不同呢?后者新建了一个User实体类,用于封装从表单中接收的数据,而在action中就不用设置相应的属性和方法了,并且这样做能够让我们的软件层次感更加明显,系统结构也更加清晰。以User为例,描述一下采用这种方式的关键步骤:

1.  在action中定义一个User类型的对象:User user;
2.  表单中各个控件的name属性要采取如下命名规则:对象名.属性名,注意对象名必须与action中定义的一样,属性名也必须和该对象的属性一一对应。如上例中的user.userName和user.password。










本文转自 646676684 51CTO博客,原文链接:http://blog.51cto.com/2402766/569973,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
API 数据安全/隐私保护
手机一键导出微信群成员名单工具,微信群WXID微信号导出软件,批量导出群成员工具
这段代码使用了itchat库,这是一个基于网页版微信API的第三方库。请注意实际使用时需要扫描二维码登录
|
NoSQL Redis
Kubernetes----部署单节点Redis
Kubernetes----部署单节点Redis
5090 1
|
安全 数据安全/隐私保护 芯片
微信读书电脑版,来了!
微信读书电脑版,来了!
|
Windows
Windows 技术篇-文件管理器访问ftp服务失败,提示:“打开FTP服务器上的文件夹是发生错误,请检查是否有权限访问该文件夹。”问题解决方法
Windows 技术篇-文件管理器访问ftp服务失败,提示:“打开FTP服务器上的文件夹是发生错误,请检查是否有权限访问该文件夹。”问题解决方法
3305 0
Windows 技术篇-文件管理器访问ftp服务失败,提示:“打开FTP服务器上的文件夹是发生错误,请检查是否有权限访问该文件夹。”问题解决方法
|
11月前
|
机器人
给 Mac 添加右键菜单「使用 VSCode 打开」
如何在 Mac 下右键文件或文件夹,直接通过菜单项「用 VSCode 打开」。
512 2
|
小程序 API
微信小程序getLocation报错 getLocation:fail the api need to be declared in the requiredPrivateInfos field in
微信小程序getLocation报错 getLocation:fail the api need to be declared in the requiredPrivateInfos field in
825 1
|
Prometheus Kubernetes Cloud Native
prometheus|云原生|轻型日志收集系统loki+promtail的部署说明
prometheus|云原生|轻型日志收集系统loki+promtail的部署说明
1363 0
|
存储 SQL Kubernetes
开源日志收集 肿么选型??
开源日志收集 肿么选型??
395 0
|
SQL 存储 安全
mysql的用户名和密码怎么查
mysql的用户名和密码怎么查
|
消息中间件 JSON 分布式计算
利用maxwell组件监听mysql之binlog日志进行实时同步数据
利用maxwell组件监听mysql之binlog日志进行实时同步数据