在struts2中action的分类有:继承 ActionSupport 实现 Action,模型驱动(ModelDriven)的 Action,多方法的 Action三种方式。

1、继承 ActionSupport 实现 Action

通过继承 ActionSupport 来实现 Action 是我们的推荐做法,因为 ActionSupport 中提供了输入验证、国际化、execute 等常用方法,使得编写 Action 时代码很简单。

1.1 UserAction.java

package com.lzugis.action;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport

{

/**

*

*/

private static final long serialVersionUID = 1L;

private String username;

private String userpass;

public String getUsername()

{

return username;

}

public void setUsername(String username)

{

this.username = username;

}

public String getUserpass()

{

return userpass;

}

public void setUserpass(String userpass)

{

this.userpass = userpass;

}

@Override

public String execute() throws Exception

{

if (username.equals("admin") && userpass.equals("admin"))

{

return "success";

}

else

{

return "error";

}

}

}

1.2 struts.xml

/p>

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

/Success.jsp

/Error.jsp

1.3 userlogin.jsp

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

用户登录

用户名:

密  码:

1.4 action响应结果

1.4.1 Success.jsp

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

登录成功

欢迎,登录

1.4.2  Error.jsp

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

登陆错误

用户名或者密码错误

2、模型驱动(ModelDriven)的 Action

Struts2 的 Action 属于 MVC 模型层, Action 中的方法代表业务逻辑, Action 中的属性代表请求中的参数,当页面请求参数较多的时候,把过多的参数对象的属性定义在 Action 中不太符合 Struts 所倡导的松耦合原则,所以我们推荐单独用 JavaBean 来封装参数,在 Action中为 JavaBean 赋值,这就是 ModelDriven 的 Action。模型驱动的 Action 要求 Action

实现ModelDriven 接口,假如登录页面需要传输参数 username 和 userpass,我们把这 2 个参数封装在一个数据的 JavaBean 中,然后在 Action 中定义该 JavaBean 为 Model 即可。

2.1 UserInfo.java

package com.lzugis.javabean;

public class UserInfo

{

private String username,userpass;

public String getUsername()

{

return username;

}

public void setUsername(String username)

{

this.username=username;

}

public String getUserpass()

{

return userpass;

}

public void setUserpass(String userpass)

{

this.userpass=userpass;

}

}

2.2 UserinfoAction.java

package com.lzugis.action;

import com.lzugis.javabean.UserInfo;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;

public class UserinfoAction extends ActionSupport implements ModelDriven

{

/**

*

*/

private static final long serialVersionUID = 1L;

private UserInfo model;

@Override

public UserInfo getModel()

{

if(model == null)

{

model = new UserInfo();

}

return model;

}

@Override

public String execute() throws Exception

{

if (model.getUsername().equals("admin") && model.getUserpass().equals("admin"))

{

return "success";

}

else

{

return "error";

}

}

}

2.3 struts.xml

/p>

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

/Success.jsp

/Error.jsp

2.4 user.jsp

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

用户登录

用户名:

密  码:

2.5 action结果

与1相同,在此不在赘述。

本实例通过struts中action的两种不同方式,实现了用户登陆的验证。相比较继承ActionSupport实现action,模型驱动的action比较方便。继承ActionSupport实现action,如果实体类的属性非常多,那么Action中也要定义相同的属性,这样显得比较繁琐。

java登录中用户类型分类_基于用户登陆的struts2中action的分类详解相关推荐

  1. python cut函数_基于python cut和qcut的用法及区别详解

    我就废话不多说了,直接上代码吧: from pandas import Series,DataFrame import pandas as pd import numpy as np from num ...

  2. vuecli 编译后部署_基于vue-cli 打包时抽离项目相关配置文件详解

    前言:当使用vue-cli进行开发时时常需要动态配置一些设置,比如接口的请求地址(axios.defaults.baseURL),这些设置可能需要在项目编译后再进行设置的,所以在vue-cli里我们需 ...

  3. python画二维数组散点图_基于python二维数组及画图的实例详解

    基于python二维数组及画图的实例详解 下面小编就为大家分享一篇基于python 二维数组及画图的实例详解,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 1.二维数组取值 注:不管 ...

  4. NLP --- 文本分类(基于概率的隐语意分析(PLSA)详解)

    上一节我们详细的讲解了SVD的隐语意分析,一旦提到这个,大家脑海里应该立刻有如下的矩阵形式: 我们通过矩阵的分解对文本数据进行压缩,压缩量很可观,尤其是原始的矩阵的维度很高时压缩的更可观,因为k通常要 ...

  5. java dfs算法蓝桥杯题_【蓝桥杯省赛JavaB组真题详解】四平方和(2016)_疼疼蛇的博客-CSDN博客...

    原文作者:疼疼蛇 原文标题:[蓝桥杯省赛JavaB组真题详解]四平方和(2016) 发布时间:2021-02-26 15:00:01 题目描述 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数 ...

  6. Java控制手机在同一网下_安卓手机控制另一手机的方法【详解】

    在日常生活中,有时候由于一些特殊的原因,可能就会需要用到远程遥控的功能.一般电脑上都可以借助qq等等平台实现这个板块的需求,但是如果应用到手机上,用户就会面临一个不小的麻烦.那么今天为大家介绍的就是关 ...

  7. python 二维数组心得_基于python 二维数组及画图的实例详解

    python中如何使用二维数组 在Python中,一个像这样的多维表格可以通过"序列的序列"实现.一个表格是行的序列.每一行又是独立单元格的序列.这类似于小编们使用的数学记号,在数 ...

  8. 【SVM分类】基于matlab哈里斯鹰算法优化支持向量机SVM分类【含Matlab源码 2243期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[SVM分类]基于matlab哈里斯鹰算法优化支持向量机SVM分类[含Matlab源码 2243期] 获取代码方式2: 付费专栏Matla ...

  9. 基于百度地图实现Android定位功能实现(详解+教程)

    基于百度地图实现Android定位功能实现(详解+教程) 1.初始化 (一)获取到SHA1 (1)找到View中的Tool Windows并打开Terminal (2)找到你的jdk的bin目录,小编 ...

最新文章

  1. 七秘诀工作效率与薪水翻番-转
  2. python跑得慢_代码跑得慢甩锅Python?手把手教你如何给代码提速30%
  3. jdbc mysql 自动重连_Mysql中JDBC如何完成自动重连机制的案例
  4. MyBatis-02 MyBatis XML方式概述及配置步骤
  5. python笔记之正则表达式
  6. vue中的watch监听数据变化
  7. Sublime Text 全程指南
  8. mysql导入sql文件,乱码,一个例子
  9. BZOJ2301[HAOI2011] Problem b
  10. 【学习笔记】cs231n-assignment1-two_layer_net
  11. 离散数学及其应用(第七版黑书)笔记
  12. Mac 抓包工具Charles4.0.2破解版,安装使用
  13. 物联网项目开发编程语言一览
  14. 【JS组件系列】——表格组件神器:bootstrap table(二:父子表和行列调序)
  15. js内存溢出和内存泄漏
  16. Python 中File(文件) 方法?
  17. 【salesforce】aura子组件怎么向父组件传递消息
  18. 真实生活的记录:我三年的外企生涯(4) 出处:天涯虚拟社区
  19. 本周最新文献速递20211017
  20. [内附完整源码和文档] 基于.Net实现的线上医疗咨询系统

热门文章

  1. localtunnel:本地端口的服务映射到公网
  2. java runtime类高级,java入门 -- RunTime类
  3. H5页面在 ios 端滑动不流畅的问题
  4. vue中子组件向父组件传递数据(实现加减的实例)
  5. echarts生成json地图最简单代码
  6. java设计模式之简单工厂模式
  7. DP:***24种设计模式--转自刘伟
  8. python爬取网易云音乐评论并进行可视化分析
  9. 白话算法(6) 散列表(Hash Table)从理论到实用(中)
  10. gridview 动态数据操作