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,如需转载请自行联系原作者
目录
相关文章
|
8月前
|
Java 数据库连接 mybatis
mybatis简单案例源码详细【注释全面】——实体层(User.java)
mybatis简单案例源码详细【注释全面】——实体层(User.java)
|
8月前
|
SQL Java 数据库连接
15:MyBatis对象关系与映射结构-Java Spring
15:MyBatis对象关系与映射结构-Java Spring
137 4
|
SQL Java 数据库连接
2021-08-05mapper代理,几种pojo输入输出,pojo扩展通过扩展继承,映射主键普通属性映射,动态SQL,逆向工程
2021-08-05mapper代理,几种pojo输入输出,pojo扩展通过扩展继承,映射主键普通属性映射,动态SQL,逆向工程
71 0
|
8月前
|
Java 数据库连接 mybatis
mybatis简单案例源码详细【注释全面】——实体层(Role.java)
mybatis简单案例源码详细【注释全面】——实体层(Role.java)
|
8月前
|
SQL Java 数据库连接
Java【付诸实践 01】使用org.apache.ibatis.plugin.Interceptor拦截器实现全局mapper.xml参数注入(可用于切换数据库实例schema)源码实例分享
Java【付诸实践 01】使用org.apache.ibatis.plugin.Interceptor拦截器实现全局mapper.xml参数注入(可用于切换数据库实例schema)源码实例分享
198 0
|
Java 数据库连接 数据库
深入了解Java中的MyBatis Plus注解 @TableLogic:优雅实现逻辑删除功能
在数据库操作中,逻辑删除是一种常见的需求,它能够将数据标记为已删除状态而不是直接从数据库中删除。MyBatis Plus作为一款强大的ORM框架,提供了注解 `@TableLogic`,使得开发者可以轻松实现逻辑删除功能,而不必手动编写复杂的SQL语句。本文将详细介绍 `@TableLogic` 注解的用法及其在持久层开发中的应用。
2738 1
|
Java 数据库连接 数据库
解析 Java 中的 @Mapper 注解:优雅实现对象映射的高效利器
在现代软件开发中,对象映射是一个常见的任务,而 Java 中的 `@Mapper` 注解则是实现对象映射的强大工具。通过该注解,我们可以轻松地定义对象之间的映射关系,提高代码的可读性和可维护性。本文将带您深入探索 Java 中的 `@Mapper` 注解,揭示其作用、用法以及在实际开发中的应用场景。
|
Java 数据库连接 数据库
解析Java中的MyBatis Plus注解 @EnumValue:优雅处理枚举值映射
在数据库操作中,枚举类型的值往往需要与数据库表中的某个字段进行映射,以便在操作中能够进行相应的转换。MyBatis Plus作为一款强大的ORM框架,提供了注解 `@EnumValue`,使开发者能够更加灵活地处理枚举值与数据库字段的映射关系,从而减少了繁琐的转换逻辑。本文将详细介绍 `@EnumValue` 注解的用法及其在持久层开发中的应用。
3934 0
|
XML 数据格式
告别web.xml映射Servlet、Filter、Listener,解锁注解新方式开发
告别web.xml映射Servlet、Filter、Listener,解锁注解新方式开发
|
Java
struts2中Action的三种开发编写形式,ActionSupport,POJO
struts2中Action的三种开发编写形式,ActionSupport,POJO
116 0
struts2中Action的三种开发编写形式,ActionSupport,POJO

热门文章

最新文章

下一篇
开通oss服务