博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts学习(五):对POJO对象访问的支持
阅读量:5739 次
发布时间:2019-06-18

本文共 3606 字,大约阅读时间需要 12 分钟。

在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" "">

<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" "">

<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"            "">

<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" "">

<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,如需转载请自行联系原作者
你可能感兴趣的文章
whereis、find、which、locate的区别
查看>>
一点不懂到小白的linux系统运维经历分享
查看>>
桌面支持--打不开网页上的pdf附件解决办法(ie-tools-compatibility)
查看>>
nagios监控windows 改了NSclient++默认端口 注意事项
查看>>
干货 | JAVA代码引起的NATIVE野指针问题(上)
查看>>
POI getDataFormat() 格式对照
查看>>
Python 中的进程、线程、协程、同步、异步、回调
查看>>
好的产品原型具有哪些特点?
查看>>
实现java导出文件弹出下载框让用户选择路径
查看>>
刨根问底--技术--jsoup登陆网站
查看>>
OSChina 五一劳动节乱弹 ——女孩子晚上不要出门,发生了这样的事情
查看>>
Spring--通过注解来配置bean
查看>>
pandas 十分钟入门
查看>>
nginx rewrite
查看>>
前端安全系列(一):如何防止XSS攻击?
查看>>
IK分词器安装
查看>>
查看Linux并发连接数
查看>>
你是谁不重要,关键是你跟谁!
查看>>
CSS中规则@media的用法
查看>>
pychecker:分析你的python代码
查看>>